Панды заменяют ряды суммой - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть образец DF:

df = pd.DataFrame(np.random.randint(0,10,size=(5, 1)), columns=list('A'))
df["B"] = ["apple","apple","orange","orange","orange"]
df

Op:

    A    B
 0  4   apple
 1  2   apple
 2  2   orange
 3  1   orange
 4  8   orange

Я пытаюсь заменить значения столбца B на сумму (groupby (B))

df.groupby("B")["A"].sum()

OP:

B
apple      6
orange    11
Name: A, dtype: int64

Ожидаемый OP:

    A   B
0   4   6
1   2   6
2   2   11
3   1   11
4   8   11

В настоящее время я использую итеративное решение для этого.Есть ли более лаконичный подход к пандам?Любое предложение по ПОДХОДУ было бы здорово.

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Другой способ сделать это без преобразования - использовать 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
0 голосов
/ 26 ноября 2018

Я думаю, что вы ищете 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...