добавить строку «все» в группу панд - PullRequest
1 голос
/ 23 сентября 2019

Это мой код (с использованием панд 0.19.2)

import pandas as pd


data=StringIO("""category,region,sales
fruits,east,12
vegatables,east,3
fruits,west,5
vegatables,wst,7
""")
df = pd.read_csv(data)
print(df.groupby('category', as_index=False).agg({'sales': sum}))

Это вывод:

     category  sales
0      fruits     17
1  vegatables     10

Мой вопрос: как добавить строку «все» так?вывод будет выглядеть так:

     category  sales
0      fruits     17
1  vegatables     10
          all     27

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Вы можете попробовать pivot_table и изменить новые данные:

new_df = df.pivot_table(columns='category',index='region', values='sales')

new_df['all'] = new_df.sum(1)

Вывод:

category  fruits  vegatables  all
region                           
east          12           3   15
west           5           7   12

А если вам нужны ваши исходные данные:

new_df.stack().to_frame(name='Sales').reset_index()

Вывод:

  region    category  Sales
0   east      fruits     12
1   east  vegatables      3
2   east         all     15
3   west      fruits      5
4   west  vegatables      7
5   west         all     12
0 голосов
/ 23 сентября 2019

вот что я в итоге сделал:

from io import StringIO

import pandas as pd

data = StringIO("""category,region,sales
fruits,east,12
vegatables,east,3
fruits,west,5
vegatables,wst,7
""")
df = pd.read_csv(data)
body=df.groupby('category', as_index=False).agg({'sales': sum})

head=df.groupby(lambda x: True, as_index=False) #advanced panda trickery
head=head.agg({'sales': sum})
head.insert(0,'category','*all*')

print(body.append(head))

в принципе, создайте другой фрейм данных со строкой ' all ' и concat

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...