gpt4 book ai didi

Pandas 为缺少的日期填零 * 由 * 组定义

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

问题:使用 Pandas ——如何有效地用零值填充缺失的日期,相对于每组的最小/最大日期值,每月(例如最后一天索引)频率?

编辑不假定输入日期对应于其月份的最后一天。
要解决此问题,请将以下行添加到以下建议的答案中:

df.date = df.date + pd.offsets.MonthEnd(0) 

如果没有这个修复,用 freq='M' 填充的值可能会导致 NA 的......!

笔记:
Pandas 版本 0.24.2

示例输入:
data = [{'name': 'A', 'date': '2019-01-01', 'val': 10},
{'name': 'A', 'date': '2019-04-30', 'val': 2},
{'name': 'B', 'date': '2019-02-15', 'val': 6},
{'name': 'B', 'date': '2019-05-01', 'val': 5}]

df = pd.DataFrame(data)

date name val
0 2019-01-01 A 10
1 2019-04-30 A 2
2 2019-02-15 B 6
3 2019-05-01 B 5

请注意,输入中的日期不一定是相应月份的第一天或最后一天。

示例所需的输出
         date name  val
0 2019-01-31 A 10
1 2019-02-28 A 0
2 2019-03-31 A 0
3 2019-04-30 A 2
4 2019-02-28 B 6
5 2019-03-31 B 0
6 2019-04-30 B 0
7 2019-05-31 B 5

尝试:

以下在索引级别工作,但用 NA 填充所有内容:
df['date'] = pd.to_datetime(df['date'])

dg = df.groupby('name').apply(lambda x: x.reindex(pd.date_range(min(x.date), max(x.date), freq='M')))

还:

Pandas filling missing dates and values within group

上面链接的答案似乎与每个组无关,而是与整个数据集的最小/最大日期值相关。

最佳答案

我会用 groupby , resampleasfreq (编辑:当您更新非月末日期的问题时。我按照您的建议添加了 pd.offsets.MonthEnd)

df.date = df.date + pd.offsets.MonthEnd(0) 
(df.set_index('date').groupby('name').resample('M')
.asfreq(fill_value=0).drop('name',1)
.reset_index())

Out[550]:
name date val
0 A 2019-01-31 10
1 A 2019-02-28 0
2 A 2019-03-31 0
3 A 2019-04-30 2
4 B 2019-02-28 6
5 B 2019-03-31 0
6 B 2019-04-30 0
7 B 2019-05-31 5

关于Pandas 为缺少的日期填零 * 由 * 组定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58107980/

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