gpt4 book ai didi

python - 非唯一列表的 Pandas 列转换为具有填充条目的列名

转载 作者:太空宇宙 更新时间:2023-11-04 05:31:30 26 4
gpt4 key购买 nike

我有一个数据框data:

import pandas as pd
data = pd.DataFrame({"col1" : ['1_xy','2_xy','3_xy','4_xy','5_xy'],
"col2" : [['a', 'b', 'c'],
['d', 'e', 'f', 'g', 'h', 'i'],
['a', 'j', 'k'],
['a', 'b', 'd'],
['a', 'l', 'm']]})

输出:

    col1    col2
0 1_xy [a, b, c]
1 2_xy [d, e, f, g, h, i]
2 3_xy [a, j, k]
3 4_xy [a, b, d]
4 5_xy [a, l, m]

我正在尝试将此数据框转换成如下所示:

import re
new_data = pd.DataFrame({'col1': ['1_xy','2_xy','3_xy','4_xy','5_xy'],
'a' : [1,0,1,1,1], 'b' : [1,0,0,1,0],
'c' : [1,0,0,0,0], 'd' : [0,1,0,1,0],
'e' : [0,1,0,0,0], 'f' : [0,1,0,0,0],
'g' : [0,1,0,0,0], 'h' : [0,1,0,0,0],
'i' : [0,1,0,0,0], 'j' : [0,0,1,0,0],
'k' : [0,0,1,0,0], 'l' : [0,0,0,0,1],
'm' : [0,0,0,0,1]})
new_data[["col1"] + [name for name in new_data.columns if not re.search("col1", name)]]

输出:

    col1    a   b   c   d   e   f   g   h   i   j   k   l   m
0 1_xy 1 1 1 0 0 0 0 0 0 0 0 0 0
1 2_xy 0 0 0 1 1 1 1 1 1 0 0 0 0
2 3_xy 1 0 0 0 0 0 0 0 0 1 1 0 0
3 4_xy 1 1 0 1 0 0 0 0 0 0 0 0 0
4 5_xy 1 0 0 0 0 0 0 0 0 0 0 1 1

即新数据框的列包含在 data.col2 列表中找到的唯一值,并且值填充与列表中的条目相对应的值。

到目前为止,我一直在尝试使用 pandas.get_dummies,但它会创建我无法控制的虚假列。

我试图对其执行此操作的真实数据非常高(很多行),因此内存“可能”是一个问题,但欢迎所有解决方案。我应该补充一点,我已经准备好一个解决方法,它使用字典方法——但不幸的是,它非常慢。希望任何人以前见过这个问题并且可以提供帮助。

我目前正在使用 python v3.4 和 pandas v0.14.1(我知道...)

最佳答案

您可以尝试 get_dummies,通过使用参数来获得正确的列名:

df = pd.get_dummies(data.col2.apply(pd.Series), prefix='', prefix_sep='')
pd.concat([data['col1'], df], axis=1)

Out[31]:
col1 a d b e j l c d f k m g h i
0 1_xy 1 0 1 0 0 0 1 0 0 0 0 0 0 0
1 2_xy 0 1 0 1 0 0 0 0 1 0 0 1 1 1
2 3_xy 1 0 0 0 1 0 0 0 0 1 0 0 0 0
3 4_xy 1 0 1 0 0 0 0 1 0 0 0 0 0 0
4 5_xy 1 0 0 0 0 1 0 0 0 0 1 0 0 0

关于python - 非唯一列表的 Pandas 列转换为具有填充条目的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37000569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com