熊猫用grpupby sum替换行

时间:2018-11-26 02:07:37

标签: pandas

我有一个样本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

我目前正在使用迭代解决方案。有没有更简洁的熊猫方法。关于该方法的任何建议都很好。

2 个答案:

答案 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')
相关问题