我有一个pandas
数据框,如下所示:
id group type action cost
101 A 1 10
101 A 1 repair 3
102 B 1 5
102 B 1 repair 7
102 B 1 grease 2
102 B 1 inflate 1
103 A 2 12
104 B 2 9
我需要从长到宽调整它的形状,但是取决于
action
列的值,如下所示:id group type action_std action_extra
101 A 1 10 3
102 B 1 5 10
103 A 2 12 0
104 B 2 9 0
换句话说,对于
action
字段为空的行,cost
值应放在action_std
列下,而对于非action
字段的行,应将cost
值汇总在action_extra
列。我尝试使用
groupby
/ agg
/ pivot
的几种组合,但是我找不到任何可以正常使用的解决方案... 最佳答案
我建议您只需将cost
列拆分为cost
和cost_extra
列。类似于以下内容:
import numpy as np
result = df.assign(
cost_extra=lambda df: np.where(
df['action'].notnull(), df['cost'], np.nan
)
).assign(
cost=lambda df: np.where(
df['action'].isnull(), df['cost'], np.nan
)
).groupby(
["id", "group", "type"]
)["cost", "cost_extra"].agg(
"sum"
)
result
看起来像: cost cost_extra
id group type
101 A 1 10.0 3.0
102 B 1 5.0 10.0
103 A 2 12.0 0.0
104 B 2 9.0 0.0
关于python - Pandas 通过条件检查重塑了从长到宽的多列数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57742001/