python - 将列表拆分为 pandas DataFrame 中的多列

标签 python pandas dataframe pivot multiple-columns

我有一个源系统给我这样的数据:

Name    |Hobbies
----------------------------------
"Han"   |"Art;Soccer;Writing"
"Leia"  |"Art;Baking;Golf;Singing"
"Luke"  |"Baking;Writing"

每个爱好列表都以分号分隔。我想把它变成一个类似表的结构,每个爱好都有一列,还有一个标志来指示一个人是否选择了那个爱好:

Name    |Art     |Baking  |Golf    |Singing |Soccer  |Writing  
--------------------------------------------------------------
"Han"   |1       |0       |0       |0       |1       |1
"Leia"  |1       |1       |1       |1       |0       |0
"Luke"  |0       |1       |0       |0       |0       |1

这是在 pandas 数据框中生成示例数据的代码:

>>> import pandas as pd
>>> df = pd.DataFrame(
...     [
...         {'name': 'Han',   'hobbies': 'Art;Soccer;Writing'},
...         {'name': 'Leia',  'hobbies': 'Art;Baking;Golf;Singing'},
...         {'name': 'Luke',  'hobbies': 'Baking;Writing'},
...     ]
... )
>>> df
                   hobbies  name
0       Art;Soccer;Writing   Han
1  Art;Baking;Golf;Singing  Leia
2           Baking;Writing  Luke

现在,我正在使用以下代码将数据放入具有我想要的结构的数据帧中,但它真的很慢(我的实际数据集大约有 150 万行) :

>>> df2 = pd.DataFrame(columns=['name', 'hobby'])
>>>
>>> for index, row in df.iterrows():
...     for value in str(row['hobbies']).split(';'):
...         d = {'name':row['name'], 'value':value}
...         df2 = df2.append(d, ignore_index=True)
...
>>> df2 = df2.groupby('name')['value'].value_counts()
>>> df2 = df2.unstack(level=-1).fillna(0)
>>>
>>> df2
value  Art  Baking  Golf  Singing  Soccer  Writing
name
Han    1.0     0.0   0.0      0.0     1.0      1.0
Leia   1.0     1.0   1.0      1.0     0.0      0.0
Luke   0.0     1.0   0.0      0.0     0.0      1.0

有没有更有效的方法来做到这一点?

最佳答案

为什么不直接更改 DataFrame?

for idx, row in df.iterrows():
    for hobby in row.hobbies.split(";"):
        df.loc[idx, hobby] = True

df.fillna(False, inplace=True)

关于python - 将列表拆分为 pandas DataFrame 中的多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47818314/

相关文章:

python - 如何将标准字典/列表迭代器与 python gtk GenericTreeModel 一起使用?

pandas - pandas 中数据的条件合并和转换

r - 如何在一张表中返回多个结果?

r - 数据框中所有列的唯一值计数

python - 如何根据条件在 Pandas 数据框的多列上分配值

python - 合并成对列表(元组)?

python - Keras适合生成器-ValueError : Failed to find data adapter that can handle input

python - 二叉搜索树的插入算法不起作用

python-3.x - 在groupby聚合函数中传递参数

python - 为什么Python中的十六进制字节数据是b'\x3 5' being interpreted as b' 5'?