pandas 操作求助,数据如下

2020-12-14 13:01:33 +08:00
 Scorpiocat
import numpy as np
import pandas as pd

df = pd.DataFrame({'月':['1','2','3','5','7'],
'医院':['人民','二院','人民','二院','人民'],
'销量':np.arange(1,10,2) })
print(df)

df1 = df.groupby(['医院','月']).sum()
print(df1)

list = np.arange(1,8,1)
print (list)

#需求:groupby 之后,同一医院的月份没有在 list 中出现(比如人民没有 2,4,5,6 月),则补充缺失月份,并且销量数据为 0,同理下面的医院也进行同样操作
1708 次点击
所在节点    Python
10 条回复
noqwerty
2020-12-14 13:24:07 +08:00
Scorpiocat
2020-12-14 13:46:47 +08:00
谢谢回答!我运行了一下代码没有问题。但是怎么能把医院中缺失的月份数据补齐去呢?
@noqwerty
xyd1205148795
2020-12-14 13:48:01 +08:00
这个可以吗
df1 = df.set_index(['月','医院']).unstack()
month =pd.DataFrame(np.arange(1,8,1).T,columns=['月'])
month['月'] = month['月'].astype('str')
data = month.merge(df1,how='left',on='月').fillna(0)
print(data)
jyyx
2020-12-14 14:20:06 +08:00
df = pd.DataFrame({'月':['1','2','3','5','7'],
'医院':['人民','二院','人民','二院','人民'],
'销量':np.arange(1,10,2) })
month_list = ['1','2','3','4','5','6','7','8']
df['月'] = df['月'].astype('category').cat.set_categories(month_list, ordered=True)
gb = df.groupby(['医院','月']).sum().fillna(0)
print(gb)
princelai
2020-12-14 14:21:58 +08:00
from itertools import product
df2 = df1.reindex(index=list(product(df1.index.get_level_values(0).unique(),[f'{i}' for i in np.arange(1,8,1)])),fill_value=0)
Scorpiocat
2020-12-14 14:46:08 +08:00
我的想法是先 groupbysum,再对每一家医院的缺失月份数据补齐,这一步就不太明白。
放出原始数据,看看大家有没有兴趣整理一下。

原始数据
链接: https://pan.baidu.com/s/1zVaTeBDGzL1q_DjYrHptIQ 提取码: 1d2j
Scorpiocat
2020-12-14 15:51:57 +08:00
princelai
2020-12-14 16:05:38 +08:00
import pandas as pd

df = pd.read_excel("data.xlsx")

df1 = df.pivot_table(index="医院",columns="月",values="总计",aggfunc="sum").reindex(columns=range(1,13)).fillna(0).cumsum(axis=1)
df1.columns = [f"{c}月" for c in df1.columns]
princelai
2020-12-14 16:06:04 +08:00
你这个 excel 表就能很快实现,一共也没多少数据
Scorpiocat
2020-12-14 16:22:56 +08:00
@princelai #9 厉害!谢谢!自己刚开始学,就想着实战了...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/735224

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX