【问题标题】:Filling missing dates within group with duplicate date pandas python用重复的日期pandas python填充组内缺失的日期
【发布时间】:2021-07-22 06:04:52
【问题描述】:

我正在尝试按 ID 填充缺失的日期,但是我的索引列之一有重复的日期,所以我尝试了此代码,但我不断收到此错误 “无法从重复轴重新索引”

这是我尝试过的两个代码:

第一:

udates=data['day'].unique()
filled_df = (data.set_index('day')
             .groupby('ID')
             .apply(lambda d: d.reindex(pd.date_range(min(data.day),
                                                      max(data.day),
                                                      freq='D')))
             .drop('ID', axis=1)
             .reset_index('ID')
             .fillna(0))
filled_df

第二个:

users = pd.unique(data.ID)
data.day= pd.to_datetime(data.day)
dates = pd.date_range(min(data.day), max(data.day))
data.set_index('day', inplace=True)

df = pd.DataFrame(index=dates)
for u in users:
    df[u] = data[data.ID==u].val

df = df.unstack().reset_index()
df.val.fillna(0, inplace=True)
df.val = df.val.astype(int)
df

这是输入数据的摘录:

day ID val
01/26/2020 AA 100
01/28/2020 AA 200
01/26/2020 BB 100
01/27/2020 BB 100
01/29/2020 BB 40

这是我想要得到的输出:

day ID val
01/26/2020 AA 100
01/27/2020 AA 0
01/28/2020 AA 200
01/26/2020 BB 100
01/27/2020 BB 100
01/28/2020 BB 0
01/29/2020 BB 40

谢谢

编辑


df = pd.DataFrame({'ID': ['AA', 'AA', 'BB', 'BB','BB'], 
                   'day': ['1/26/2020', '1/28/2020', '1/26/2020', '1/27/2020','1/29/2020'], 'val': [100, 200, 100, 100, 40]})

【问题讨论】:

  • 您能否包含用于创建所需输出的示例数据?请参阅:How to make good reproducible pandas examples 获取提示
  • 谢谢,我编辑问题
  • df.set_index('day').groupby("ID").apply(lambda d: d.reindex(pd.date_range(d.index.min(),d.index.max(), freq='D'))) 适用于您的代码。请分享一个重复的示例数据一个组

标签: python pandas dataframe


【解决方案1】:
>>> df.set_index("day") \
      .groupby("ID")["val"] \
      .resample("D") \
      .first() \
      .fillna(0) \
      .reset_index()

   ID        day    val
0  AA 2020-01-26  100.0
1  AA 2020-01-27    0.0
2  AA 2020-01-28  200.0
3  BB 2020-01-26  100.0
4  BB 2020-01-27  100.0
5  BB 2020-01-28    0.0
6  BB 2020-01-29   40.0

注意:函数first() 没有用。这是因为 Resampler.fillna() 仅适用于 method 关键字。与DataFrame.fillna() 不同,您不能传递value

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-15
    • 2021-09-03
    • 2018-02-12
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 2021-06-17
    相关资源
    最近更新 更多