我有一个样本DF:
df = pd.DataFrame(np.random.randint(0,10,size=(5, 1)), columns=list('A'))
df["B"] = ["apple","apple","orange","orange","orange"]
df
操作:
A B
0 4 apple
1 2 apple
2 2 orange
3 1 orange
4 8 orange
我正在尝试将B列的值替换为sum(groupby(B))
df.groupby("B")["A"].sum()
OP:
B
apple 6
orange 11
Name: A, dtype: int64
预期的操作次数:
A B
0 4 6
1 2 6
2 2 11
3 1 11
4 8 11
我目前正在使用迭代解决方案。有没有更简洁的熊猫方法。关于该方法的任何建议都很好。
答案 0 :(得分:1)
另一种无需转换的方法是使用GroupBy,Sum + map 试试这个,
df["B"]=df["B"].map(df.groupby("B")["A"].sum())
输入:
A B
0 9 apple
1 2 apple
2 3 orange
3 8 orange
4 9 orange
输出:
A B
0 9 11
1 2 11
2 3 20
3 8 20
4 9 20
答案 1 :(得分:0)
我认为您正在寻找transform
sum
df.groupby('B').A.transform('sum')
0 7
1 7
2 12
3 12
4 12
Name: A, dtype: int32
#df['new']=df.groupby('B').A.transform('sum')