加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 插入行并添加缺少的数据

发布时间:2020-12-16 22:44:59 所属栏目:Python 来源:网络整理
导读:我想知道是否有人可以就如何继续下面的内容提出一些建议.作为熊猫的新手,我觉得目前我的整体知识和技能水平还不足以处理我在下面概述的要求. 我有一个pandas数据框,其中包含大约2000个零件编号的列表.对于每个零件,零件的销售年限,月份数量,销售数量和销售价

我想知道是否有人可以就如何继续下面的内容提出一些建议.作为熊猫的新手,我觉得目前我的整体知识和技能水平还不足以处理我在下面概述的要求.

我有一个pandas数据框,其中包含大约2000个零件编号的列表.对于每个零件,零件的销售年限,月份数量,销售数量和销售价值.每年都有可能偶尔失踪.在下面显示的2007年的示例数据中,由于该月没有销售,因此缺少第11个月.同样地,对于2008年,第11个月和12人失踪.我想要做的是插入每年缺少的月份,并在每个part_id组中插入包含适当年份,月份和零值的行.
总的来说,数据是大约. 60200,大约有行. 2000部分id.
我不介意花时间研究解决方案,但可以用一些指示来帮助我的教育.

index                     Part_ID  Year     Month    Qty           Sales
60182                       ZZSSL  2007      5       11.0          724.85   
60183                       ZZSSL  2007      6        7.0          537.94   
60184                       ZZSSL  2007      7       17.0         1165.02   
60185                       ZZSSL  2007      8        3.0          159.56   
60186                       ZZSSL  2007      9       67.0         4331.28   
60187                       ZZSSL  2007     10       72.0         4582.98   
60188                       ZZSSL  2007     12       42.0         2651.42   
60189                       ZZSSL  2008      1       22.0         1422.32   
60190                       ZZSSL  2008      2       16.0         1178.98   
60191                       ZZSSL  2008      3       20.0         1276.60   
60192                       ZZSSL  2008      4       28.0         2120.84   
60193                       ZZSSL  2008      5        2.0           83.03   
60194                       ZZSSL  2008      6       16.0         1250.24   
60195                       ZZSSL  2008      9       17.0         1323.34   
60196                       ZZSSL  2008     10        2.0          197.98   
60197                       ZZSSL  2009      1       21.0         1719.30   
60198                       ZZSSL  2009      2        1.0           78.15   
60199                       ZZSSL  2009      3        3.0          281.34   
60200                       ZZSSL  2009      4       25.0         2214.25   
60201                       ZZSSL  2009      5       10.0          833.60   
60202                       ZZSSL  2009      6        1.0           83.36   
60203                       ZZSSL  2009      7        1.0           83.36
最佳答案
我认为你需要首先0700,然后0700和reindex列由MultiIndex从from_productstack创建:

mux = pd.MultiIndex.from_product([['Qty','Sales'],np.arange(1,13)])

print (df.set_index(['Part_ID','Year','Month'])
         .unstack(fill_value=0)
         .reindex(columns=mux,fill_value=0)
         .stack()
         .rename_axis(['Part_ID','Month'])
         .reset_index())
   Part_ID  Year  Month   Qty    Sales
0    ZZSSL  2007      1   0.0     0.00
1    ZZSSL  2007      2   0.0     0.00
2    ZZSSL  2007      3   0.0     0.00
3    ZZSSL  2007      4   0.0     0.00
4    ZZSSL  2007      5  11.0   724.85
5    ZZSSL  2007      6   7.0   537.94
6    ZZSSL  2007      7  17.0  1165.02
7    ZZSSL  2007      8   3.0   159.56
8    ZZSSL  2007      9  67.0  4331.28
9    ZZSSL  2007     10  72.0  4582.98
10   ZZSSL  2007     11   0.0     0.00
11   ZZSSL  2007     12  42.0  2651.42
12   ZZSSL  2008      1  22.0  1422.32
13   ZZSSL  2008      2  16.0  1178.98
14   ZZSSL  2008      3  20.0  1276.60
15   ZZSSL  2008      4  28.0  2120.84
16   ZZSSL  2008      5   2.0    83.03
17   ZZSSL  2008      6  16.0  1250.24
18   ZZSSL  2008      7   0.0     0.00
19   ZZSSL  2008      8   0.0     0.00
20   ZZSSL  2008      9  17.0  1323.34
21   ZZSSL  2008     10   2.0   197.98
22   ZZSSL  2008     11   0.0     0.00
23   ZZSSL  2008     12   0.0     0.00
24   ZZSSL  2009      1  21.0  1719.30
25   ZZSSL  2009      2   1.0    78.15
26   ZZSSL  2009      3   3.0   281.34
27   ZZSSL  2009      4  25.0  2214.25
28   ZZSSL  2009      5  10.0   833.60
29   ZZSSL  2009      6   1.0    83.36
30   ZZSSL  2009      7   1.0    83.36
31   ZZSSL  2009      8   0.0     0.00
32   ZZSSL  2009      9   0.0     0.00
33   ZZSSL  2009     10   0.0     0.00
34   ZZSSL  2009     11   0.0     0.00
35   ZZSSL  2009     12   0.0     0.00

如果只需要每年的开始和结束月份之间缺少值:

df['Month'] = pd.to_datetime(df.Month.astype(str) + '-01-' 
                                                  + df.Year.astype(str))
df = df.set_index('Month')
       .groupby(['Part_ID','Year'])
       .resample('MS')
       .asfreq()
       .fillna(0)
       .drop(['Part_ID','Year'],axis=1)
       .reset_index()
df['Month'] = df['Month'].dt.month 
print (df)
   Part_ID  Year  Month   Qty    Sales
0    ZZSSL  2007      5  11.0   724.85
1    ZZSSL  2007      6   7.0   537.94
2    ZZSSL  2007      7  17.0  1165.02
3    ZZSSL  2007      8   3.0   159.56
4    ZZSSL  2007      9  67.0  4331.28
5    ZZSSL  2007     10  72.0  4582.98
6    ZZSSL  2007     11   0.0     0.00
7    ZZSSL  2007     12  42.0  2651.42
8    ZZSSL  2008      1  22.0  1422.32
9    ZZSSL  2008      2  16.0  1178.98
10   ZZSSL  2008      3  20.0  1276.60
11   ZZSSL  2008      4  28.0  2120.84
12   ZZSSL  2008      5   2.0    83.03
13   ZZSSL  2008      6  16.0  1250.24
14   ZZSSL  2008      7   0.0     0.00
15   ZZSSL  2008      8   0.0     0.00
16   ZZSSL  2008      9  17.0  1323.34
17   ZZSSL  2008     10   2.0   197.98
18   ZZSSL  2009      1  21.0  1719.30
19   ZZSSL  2009      2   1.0    78.15
20   ZZSSL  2009      3   3.0   281.34
21   ZZSSL  2009      4  25.0  2214.25
22   ZZSSL  2009      5  10.0   833.60
23   ZZSSL  2009      6   1.0    83.36
24   ZZSSL  2009      7   1.0    83.36

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读