为了账号安全,请及时绑定邮箱和手机立即绑定

使用重复索引重塑 Pandas 数据框并填充缺失的行

使用重复索引重塑 Pandas 数据框并填充缺失的行

喵喔喔 2022-07-26 16:33:48
我想添加与给定索引对应的缺失行。例如,如果我有:df = pd.DataFrame({"date": ["1", "2", "1", "3"],                   "name": ["bob", "bob", "anne", "anne"],                   "x": [1, 2, 2, 3],                   "y": [2, 4, 5, 5]})我想获得以下内容:    name    date    x   y    anne    1       2   5    anne    2       NA  NA   <- because date 2 is missing for Anne    anne    3       3   5    bob     1       1   2    bob     2       2   4    bob     3       NA  NA   <- because date 3 is missing for Bob我用 pivot_table、pivot 尝试了很多东西,但到目前为止还想不通。df.pivot_table(index = ["name", "date"], values = ['x','y'], fill_value=0).reset_index()没有填充缺失的行。
查看完整描述

2 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

DataFrame.set_index 与DataFrame.unstack,DataFrame.stack和一起使用DataFrame.reset_index

df = df.set_index(["name", "date"]).unstack().stack(dropna=False).reset_index()

print (df)

   name date    x    y

0  anne    1  2.0  5.0

1  anne    2  NaN  NaN

2  anne    3  3.0  5.0

3   bob    1  1.0  2.0

4   bob    2  2.0  4.0

5   bob    3  NaN  NaN

您的解决方案是可能的相同方式:


df = df.pivot_table(index = ["name", "date"], values = ['x','y'], fill_value=0).unstack().stack(dropna=False).reset_index()

print (df)

   name date    x    y

0  anne    1  2.0  5.0

1  anne    2  NaN  NaN

2  anne    3  3.0  5.0

3   bob    1  1.0  2.0

4   bob    2  2.0  4.0

5   bob    3  NaN  NaN


查看完整回答
反对 回复 2022-07-26
?
暮色呼如

TA贡献1853条经验 获得超9个赞

另一种方法Multiindex.from_productreindex

idx = pd.MultiIndex.from_product((df['date'].unique(),

                                 df['name'].unique()),names=['date','name'])

df.set_index(['date','name']).reindex(idx).sort_index(level=1).reset_index()

  date  name    x    y

0    1  anne  2.0  5.0

1    2  anne  NaN  NaN

2    3  anne  3.0  5.0

3    1   bob  1.0  2.0

4    2   bob  2.0  4.0

5    3   bob  NaN  NaN


查看完整回答
反对 回复 2022-07-26
  • 2 回答
  • 0 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号