1 回答
 
                    
                    TA贡献1860条经验 获得超8个赞
通常,不需要自己创建所有这些子集,因为您可以进行“累积”计算来完成所需的操作。
C2 是每个“ID”内的累加和( )的结果cumsum。pd.get_dummies您的虚拟列是每个组组内的累积最大值( )的结果cummax(归功于@Ben.T)。加入计算以concat获得结果并使用groupby+ngroup标记所需索引的每个 ID。
# Dummies for C1
df1 = pd.get_dummies(df.C1)
df1 = df1.groupby(df['id']).cummax()
# Join, ID from df, dummies from df1 and cumsum
df1 = pd.concat([df['id'], df1, df.groupby('id')['C2'].cumsum()], axis=1)
# Create your index, breaks alignment of df and df1 from this point on
df1.index = df1.groupby(df['id'], sort=False).ngroup()
print(df1)
id 1A 1B 1C 2A 2B C2
0 1 1 0 0 0 0 100
0 1 1 1 0 0 0 300
0 1 1 1 1 0 0 600
1 2 0 0 0 1 0 400
1 2 0 0 0 1 1 900
添加回答
举报
