gpt4 book ai didi

python - 如何根据类别将 Pandas 数据框行转换为列?

转载 作者:太空狗 更新时间:2023-10-29 22:29:09 24 4
gpt4 key购买 nike

我有一个带有类别变量和一些数字变量的 Pandas 数据框。像这样:

ls = [{'count':5, 'module':'payroll', 'id':2}, {'count': 53, 'module': 'general','id':2}, {'id': 5,'count': 35, 'module': 'tax'}, ]
df = pd.DataFrame.from_dict(ls)

df 看起来像这样:

 df
Out[15]:
count id module
0 5 2 payroll
1 53 2 general
2 35 5 tax

我想将(转置是正确的词吗?)模块变量转换为列并按 ID 分组。所以像这样:

   general_count  id  payroll_count  tax_count
0 53.0 2 5.0 NaN
1 NaN 5 NaN 35.0

一种方法是使用应用:

df['payroll_count'] = df.id.apply(lambda x: df[df.id==x][df.module=='payroll'])

但是,这有很多缺点:

  1. 成本高,而且需要太多时间

  2. 创建工件并清空 需要清理的数据框。

我觉得用 pandas groupby 可以更好地实现这一目标,但找不到更有效地执行此相同操作的方法。请帮忙。

最佳答案

您可以使用 groupby按第一个创建新 index 和最后一个 column 的列。然后需要以某种方式聚合 - 我使用 mean , 然后通过 DataFrame.squeeze 将一列 DataFrame 转换为 Series (然后没有必要删除列中多索引的顶层)并按 unstack reshape .最后 add_suffix列名:

df = df.groupby(['id','module']).mean().squeeze().unstack().add_suffix('_count')
print (df)
module general_count payroll_count tax_count
id
2 53.0 5.0 NaN
5 NaN NaN 35.0

另一种解决方案 pivot ,然后需要通过 list comprehension 从列中删除 Multiindex:

df = df.pivot(index='id', columns='module')
df.columns = ['_'.join((col[1], col[0])) for col in df.columns]
print (df)
general_count payroll_count tax_count
id
2 53.0 5.0 NaN
5 NaN NaN 35.0

关于python - 如何根据类别将 Pandas 数据框行转换为列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39635993/

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