我有一个Pandas的数据框架,类似于这个:
| 姓名|销售额|利润|利润_标志|
| - ------|- ------|- ------|- ------|
| 乔|二百|一百|真的|
| 乔|三百|一百五十|假|
| 马克|二百|一百|真的|
| 马克|三百|一百五十|真的|
| 朱蒂|三百|一百五十|假|
实际的数据框有100列。
其理念是:我想按名称分组,并聚集所有列。但是,某些列依赖于标志。在这种情况下,无论如何都将聚集sales
,但只有当profit_flag
为True时,profit
才应包括在聚集中。
如果我们使用sum
,它应该是这样的:
| 姓名|销售额|利润|
| - ------|- ------|- ------|
| 乔|五百|一百|
| 朱蒂|三百|南姓|
| 马克|五百|二百五十|
有没有什么办法可以用df.groupby('name').agg()
在一行代码中完成这个任务?
现在我正在使用:
grouped = pd.DataFrame()
grouped['sales'] = df.groupby('name').sales.sum()
grouped['profit'] = df[df.profit_flag].groupby('name').profit.sum()
我得到了正确的结果,但是由于实际的 Dataframe 有更多的列,我想知道我是否可以编写这样的代码来避免混乱:
grouped = df.groupby('name').agg({
'sales': 'sum',
'profit' 'sum' #if profit_flag })
这甚至是可能的,或者我应该只是分组'标志依赖列'在单独的状态?
1条答案
按热度按时间kgsdhlau1#
您可以在聚合之前屏蔽这些值:
输出: