填补MultiIndex Pandas Dataframe中的日期空白

填补MultiIndex Pandas Dataframe中的日期空白,第1张

填补MultiIndex Pandas Dataframe中的日期空白

您不清楚确切的失踪日期。我只是假设您要填写

NaN
在其他地方 确实 有观察到的任何日期。如果此假设有误,则必须修改我的解决方案。

旁注:添加一行以创建

Dataframe

In [55]: df = pd.Dataframe({'A': ['loc_a'] * 12 + ['loc_b'],   ....:         'B': ['group_a'] * 7 + ['group_b'] * 3 + ['group_c'] * 2 + ['group_a'],   ....:         'Date': ["2013-06-11",   ....:      "2013-07-02",   ....:      "2013-07-09",   ....:      "2013-07-30",   ....:      "2013-08-06",   ....:      "2013-09-03",   ....:      "2013-10-01",   ....:      "2013-07-09",   ....:      "2013-08-06",   ....:      "2013-09-03",   ....:      "2013-07-09",   ....:      "2013-09-03",   ....:      "2013-10-01"],   ....:          'Value': [22, 35, 14,  9,  4, 40, 18, 4, 2, 5, 1, 2, 3]})In [56]:In [56]: df.Date = pd.to_datetime(df.Date)In [57]: df = df.set_index(['A', 'B', 'Date'])In [58]:In [58]: print(df)    ValueA     B       Date  loc_a group_a 2013-06-11     22   2013-07-02     35   2013-07-09     14   2013-07-30      9   2013-08-06      4   2013-09-03     40   2013-10-01     18      group_b 2013-07-09      4   2013-08-06      2   2013-09-03      5      group_c 2013-07-09      1   2013-09-03      2loc_b group_a 2013-10-01      3

要填充未观察到的值,我们将使用

unstack
stack
方法。取消堆叠将创建
NaN
我们感兴趣的s,然后将它们堆叠起来使用。

In [71]: df.unstack(['A', 'B'])Out[71]:    Value     A  loc_aloc_bBgroup_a  group_b  group_c  group_aDate         2013-06-11       22      NaN      NaN      NaN2013-07-02       35      NaN      NaN      NaN2013-07-09       14        4        1      NaN2013-07-30        9      NaN      NaN      NaN2013-08-06        4        2      NaN      NaN2013-09-03       40        5        2      NaN2013-10-01       18      NaN      NaN        3In [59]: df.unstack(['A', 'B']).fillna(0).stack(['A', 'B'])Out[59]:     ValueDate       A     B  2013-06-11 loc_a group_a     22      group_b      0      group_c      0loc_b group_a      02013-07-02 loc_a group_a     35      group_b      0      group_c      0loc_b group_a      02013-07-09 loc_a group_a     14      group_b      4      group_c      1loc_b group_a      02013-07-30 loc_a group_a      9      group_b      0      group_c      0loc_b group_a      02013-08-06 loc_a group_a      4      group_b      2      group_c      0loc_b group_a      02013-09-03 loc_a group_a     40      group_b      5      group_c      2loc_b group_a      02013-10-01 loc_a group_a     18      group_b      0      group_c      0loc_b group_a      3

根据需要重新排列索引级别。

我必须将其滑到

fillna(0)
中间,以免
NaN
s掉落。
stack
确实有一个
dropna
论点。我认为将其设置为false将保留所有
NaN
行。可能是个错误?



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5601734.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存