我有一个pandas数据框,其中有一个category变量和一些number变量。像这样的:
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
一种方法是使用apply:
df['payroll_count'] = df.id.apply(lambda x: df[df.id==x][df.module=='payroll'])
然而,这有多个缺点:
成本高昂,而且花费的时间太多
创建工件并清空 需要清理的数据帧。
我觉得用pandas groupby有更好的方法来实现这一点,但是找不到更有效的方法来实现同样的操作。请帮忙。
你可以使用
set_index
和unstack
您可以使用^{} by列,这些列首先创建新的} ,然后通过^{} 将一列} 重塑。最后一个^{} 到列名:
index
,最后创建column
。然后以某种方式需要aggreagate—我使用^{DataFrame
转换为Series
(然后不需要删除列中多索引的顶层),并通过^{使用^{} 的另一个解决方案,然后需要通过
list comprehension
从列中删除Multiindex
:相关问题 更多 >
编程相关推荐