聚合python数据帧中的行
我有一个数据框架,记录了产品从篮子中添加和删除的时间。但是,聚合python数据帧中的行,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据框架,记录了产品从篮子中添加和删除的时间。但是,set\u name列包含颜色集和形状集的两组信息。见下文: eff_date prod_id set_name change_type 0 20150414 20770 MONO COLOR SET ADD 1 20150414 20770 REC SHAPE SET ADD 2 20150429 132
set\u name
列包含颜色集和形状集的两组信息。见下文:
eff_date prod_id set_name change_type
0 20150414 20770 MONO COLOR SET ADD
1 20150414 20770 REC SHAPE SET ADD
2 20150429 132 MONO COLOR SET ADD
3 20150429 132 REC SHAPE SET ADD
4 20150521 199 MONO COLOR SET DROP
5 20150521 199 REC SHAPE SET DROP
6 20150521 199 TET SHAPE SET ADD
7 20150521 199 MONO COLOR SET ADD
我想将set\u name
中包含的两组信息分为color\u set
和shape\u set
列,然后删除set\u name
。因此,前面的df应该如下所示:
eff_date prod_id change_type color_set shape_set
0 20150414 20770 ADD MONO COLOR SET REC SHAPE SET
1 20150429 132 ADD MONO COLOR SET REC SHAPE SET
2 20150521 199 DROP MONO COLOR SET REC SHAPE SET
3 20150521 199 ADD MONO COLOR SET TET SHAPE SET
我尝试先在for循环中拆分列,然后使用groupby进行聚合:
for index, row in df.iterrows():
if 'COLOR' in df.loc[index,'set_name']:
df.loc[index,'color_set'] = df.loc[index,'set_name']
if 'SHAPE' in df.loc[index,'set_name']:
df.loc[index,'shape_set'] = df.loc[index,'set_name']
df = df.fillna('')
df.groupby(['eff_date','prod_id','change_type']).agg({'color_set':sum,'shape_set':sum})
然而,这给我留下了一个只有两列的数据帧和多级索引,我不知道如何取消堆栈
color_set shape_set
eff_date prod_id change_type
20150414 20770 ADD MONO COLOR SET REC SHAPE SET
20150429 132 ADD MONO COLOR SET REC SHAPE SET
20150521 199 DROP MONO COLOR SET REC SHAPE SET
ADD MONO COLOR SET TET SHAPE SET
非常感谢您在这方面的任何帮助 除了必须重置索引之外,您的代码看起来还不错,但是我们可以将其简化很多(特别是不需要
iterrows
,这可能会非常慢,使用pivot
和一个小技巧来获取列名
此答案假设您的列中只有这两个选项,如果您有更多类别,只需使用numpy。选择而不是numpy。其中
并以这种方式定义您的条件/输出
df.reset_index()同样,请提供df.to_dict()的输出。
@ifly6谢谢!!有一段时间我完全忘记了这个函数的存在
df['key'] = np.where(df['set_name'].str.contains('COLOR'), 'color_set', 'shape_set')
df.pivot_table(
index=['eff_date', 'prod_id', 'change_type'],
columns='key',
values='set_name',
aggfunc='first'
).reset_index()
key eff_date prod_id change_type color_set shape_set
0 20150414 20770 ADD MONO COLOR SET REC SHAPE SET
1 20150429 132 ADD MONO COLOR SET REC SHAPE SET
2 20150521 199 ADD MONO COLOR SET TET SHAPE SET
3 20150521 199 DROP MONO COLOR SET REC SHAPE SET