Группировка уникальных значений столбца по сумме каждого уникального значения в pandas столбце данных - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь взять pandas фрейм данных и сгруппировать его по двум столбцам, чтобы получить сумму для каждой уникальной комбинации в соответствующем столбце значений.

Dataframe выглядит следующим образом:

Charge Code  Billing Number  Amount
1250-001        500120        5000
1250-001        500120       -5000
1250-001        500220         300
1250-001        520320         400
1136-001        360220         700
1136-001        360220        -100
1207-001        070420         100
1207-001        070420         200
1207-001        070420         300
1207-001        070320         400
1090-001        900220         500

Я хотел бы сгруппировать dataframe по столбцам Charge code и Billing Number, чтобы получить сумму значений в столбце Amount. Если сумма оказывается равной нулю, ее не следует включать в кадр данных.

Нужный кадр данных будет выглядеть следующим образом:

 Charge Code  Billing Number  Amount
  1250-001      500220         300
  1250-001      520320         400
  1136-001      360220         600
  1207-001      070420         600
  1207-001      070320         400
  1090-001      900220         500

Я предполагаю, что он должен выглядеть примерно так:

df_Paid.groupby(level=0)['Charge Code','Billing Number'].sum()

Использование решения:

df_Paid.groupby(['Charge Code','Billing Number'])['Amount'].sum().replace(0, np.nan).dropna()

возвращает:

Charge Code  Billing Number  Amount
  1250-001      500220         300
                520320         400
  1136-001      360220         600
  1207-001      070420         600
                070320         400
  1090-001      900220         500

, что выдает мне следующую ошибку при попытке переместить его на листы Google с помощью API Google:

IndexError: tuple index out of range

из-за пустого кода платежа строки в коде зарядки.

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

Вы можете заменить 0 на NaN, а затем сбросить значения NaN:

df_Paid.groupby(['Charge Code','Billing Number'])['Amount'].sum().replace(0, np.nan).dropna().reset_index()
0 голосов
/ 06 апреля 2020

Вы можете agg, затем lo c values != 0:

df_temp = df_Paid['Charge Code','Billing Number'].agg({'Amount': 'sum'}).reset_index()
df_Paid = df_temp.loc[df_temp['Amount'] != 0]
...