【问题标题】:Fill in missing column values based on pattern in Python根据Python中的模式填充缺失的列值
【发布时间】:2023-04-01 10:44:01
【问题描述】:

我有一个数据框 df,我想在其中根据季度填充特定列中的缺失值。

数据

type    date    stat  test
aa      Q1 2022 20    1
aa      Q2 2022 10    2
aa      Q3 2022 30    1
bb      Q1 2022 30    1
bb      Q2 2022 10    1

希望

type    date    stat  test
aa      Q1 2022 20    1
aa      Q2 2022 10    2
aa      Q3 2022 30    1
aa      Q4 2022 0
bb      Q1 2022 30    1
bb      Q2 2022 10    1
bb      Q3 2022 0
bb      Q4 2022 0

正在做

Logic:

The pattern is Q1 2022, Q2 2022, Q3 2022 and Q4 2022. 
If there is a 'break' in this pattern, the missing data should fill in accordingly with a stat 
value of 0.

我相信我可以创建一个字典,然后结合 impute 函数

data = {  "Q1 2022":0 ,
          "Q2 2022":0 ,
          "Q3 2022":0 ,
          "Q4 2022":0 ,
       }



df["type"].fillna("", inplace = True) 
df["date"].fillna("", inplace = True)   #input dictionary mapping
df["stat"].fillna("0", inplace = True)

欢迎提出任何建议。

【问题讨论】:

  • 我想你可以使用 pd.to_datetimeresample 的组合。
  • 啊好的,我试试这个谢谢

标签: python pandas numpy


【解决方案1】:

你可以先pivot 然后reindex 回来

l =['Q1 2022','Q2 2022','Q3 2022','Q4 2022']
out = df.pivot(*df).reindex(columns = l,fill_value=0).stack().reset_index(name = 'stat')

【讨论】:

  • 谢谢你,由于某种原因它跳过了'Q3 2022' - 我将你的脚本更新为:l =['Q1 2022','Q2 2022','Q3 2022','Q4 2022'] @贝尼
  • @Lynn 不错,我也更新了~
  • 好的,谢谢-尽管运行时似乎没有遵循模式。我正在研究。谢谢
  • 我认为它不起作用,因为@Lynn 添加了新列test。它引发了TypeError: pivot() takes from 1 to 4 positional arguments but 5 were given
  • 添加前没有效果
【解决方案2】:

使用typedates 的所有组合创建一个新数据框,然后将其与原始数据框合并。最后,根据您的规则填写值:

from itertools import product

dates = ['Q1 2022', 'Q2 2022', 'Q3 2022', 'Q4 2022']
df1 = pd.DataFrame(product(df['type'].unique(), dates), columns=['type', 'date'])
df1 = df1.merge(df, how='left').fillna({'stat': 0, 'test': ''})

输出:

>>> df1
  type     date  stat test
0   aa  Q1 2022  20.0  1.0
1   aa  Q2 2022  10.0  2.0
2   aa  Q3 2022  30.0  1.0
3   aa  Q4 2022   0.0     
4   bb  Q1 2022  30.0  1.0
5   bb  Q2 2022  10.0  1.0
6   bb  Q3 2022   0.0     
7   bb  Q4 2022   0.0     

【讨论】:

    猜你喜欢
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 2018-04-07
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多