gpt4 book ai didi

python - Pandas 重新索引日期索引按组重新访问

转载 作者:行者123 更新时间:2023-12-03 07:58:49 24 4
gpt4 key购买 nike

这个问题之前已经被问过,这里已经提出了一个可行的解决方案 Pandas reindex dates in Groupby ,这在过去对我有用,但现在不再有用了。

因此,回顾一下,我需要使用日期重新索引数据帧以创建“平衡面板” - 不要在任何组中缺少日期值组合。这是一个例子:

import pandas as pd
from datetime import datetime

date1 = datetime.strptime('2023-01-01', '%Y-%m-%d').date()
date2 = datetime.strptime('2023-01-02', '%Y-%m-%d').date()
date3 = datetime.strptime('2023-01-03', '%Y-%m-%d').date()

df = pd.DataFrame({'Date':[date1] * 3 + [date2] + [date3] * 3,
'Group':['A', 'B', 'C', 'A', 'A', 'B', 'C'],
'Value':[20, 10, 23, 45, 60, 14, 25]})

df.set_index('Date', inplace=True)

期望的输出是:

df_target = pd.DataFrame({'Date':[date1] * 3 + [date2] * 3  + [date3] * 3,
'Group':['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'],
'Value':[20, 10, 23, 45, 0, 0, 60, 14, 25]})

df_target.set_index('Date', inplace=True)

尝试的解决方案(注意断言):

def reindex_by_date(df, freq):
dates = pd.date_range(start=df.index.min(), end=df.index.max(), freq=freq)
idx = pd.Index(dates, name='Dates')
assert dates.duplicated().sum()==0
return df.reindex(dates, fill_value=0)

df.groupby('Group').apply(reindex_by_date(df, freq='D'))

# this has also been added: .reset_index(drop=True)

产生错误:

ValueError: cannot reindex from a duplicate axis

我什至检查了标志(这里是True):

df.flags.allows_duplicate_labels

最佳答案

您在 apply 中错误地调用了该函数(您没有传递组,而是传递整个 DataFrame)。

这应该是:

df.groupby('Group').apply(lambda g: reindex_by_date(g, freq='D'))

或者:

df.groupby('Group').apply(reindex_by_date, freq='D')

输出:

                 Group  Value
Group
A 2023-01-01 A 20
2023-01-02 A 45
2023-01-03 A 60
B 2023-01-01 B 10
2023-01-02 0 0
2023-01-03 B 14
C 2023-01-01 C 23
2023-01-02 0 0
2023-01-03 C 25

请注意,您必须删除 Groupreset_index 以避免以 Group 中的 0 作为列重新索引:

(df.groupby('Group').apply(reindex_by_date, freq='D')
.drop(columns='Group').reset_index('Group')
.rename_axis('Date')
)

输出:


Group Value
Date
2023-01-01 A 20
2023-01-02 A 45
2023-01-03 A 60
2023-01-01 B 10
2023-01-02 B 0
2023-01-03 B 14
2023-01-01 C 23
2023-01-02 C 0
2023-01-03 C 25

关于python - Pandas 重新索引日期索引按组重新访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75043922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com