【发布时间】: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')))适用于您的代码。请分享一个重复的示例数据在一个组