gpt4 book ai didi

python - 用 pandas 填充最后已知的数据

转载 作者:太空宇宙 更新时间:2023-11-03 17:41:41 26 4
gpt4 key购买 nike

我使用具有这种结构的数据框:

[timestamp][id][A][B][C][D]

由于多种原因,并非所有数据都会被检索,我最终会得到类似的结果

2015-05-05 15:00:00   2     NaN     NaN     NaN    2680 
2015-05-05 15:00:00 3 0989 0020 -0011 2680
2015-05-05 15:00:00 4 1022 0060 -0076 2600
2015-05-05 15:00:00 5 NaN NaN NaN 2623

在本例中,使用 fillna(method="ffill") 将使用 id=4 中的 'A' 值,填写id=5'A'值。

但是,我想要完成的任务是从 (700000) csv 条目中某处的先前已知值填充 id=5'A' 值。 (并以这种方式填充所有列中的所有 NaN 值)

2014-07-24 17:49:00   5   1046.0   -3.0   -239.0   2800.0
...
2015-05-05 15:00:00 2 NaN NaN NaN 2680
2015-05-05 15:00:00 3 0989 0020 -0011 2680
2015-05-05 15:00:00 4 1022 0060 -0076 2600
2015-05-05 15:00:00 5 NaN NaN NaN 2623

变成了

2015-05-05 15:00:00   2     NaN     NaN     NaN    2680 
2015-05-05 15:00:00 3 0989 0020 -0011 2680
2015-05-05 15:00:00 4 1022 0060 -0076 2600
2015-05-05 15:00:00 5 1046 -3.0 -239.0 2623

值来自 id=5 的最后已知数据,即 2014-07-24 17:49:00

而不是

2015-05-05 15:00:00   2     NaN     NaN     NaN    2680 
2015-05-05 15:00:00 3 0989 0020 -0011 2680
2015-05-05 15:00:00 4 1022 0060 -0076 2600
2015-05-05 15:00:00 5 1022 0060 -0076 2623

这就是我执行fillna时发生的情况

我的第二个解决方案是执行groupby“id”,然后执行fillna()。但这远远超出了我作为 pandas 用户的技能。所以我只是想知道是否有更好的解决方案。

最佳答案

首先我按 id 进行分组,然后在该组中,我用之前的值填充 nan。

df = pd.DataFrame([['2014-07-24 17:49:00', 5, 1046.0, -3, -239, 2800],
['2015-05-05 15:00:00', 2, np.nan, np.nan,np.nan, 2680],
['2015-05-05 15:00:00', 3, 989, 20, -11, 2680],
['2015-05-05 15:00:00', 4, 1022, 60, -76, 2600],
['2015-05-05 15:00:00', 5, np.nan, np.nan, np.nan, 2623]],
columns='timestamp id A B C D'.split())

df.groupby('id').apply(lambda group: group.fillna(method='ffill'))

结果:

             timestamp  id     A   B    C     D
0 2014-07-24 17:49:00 5 1046 -3 -239 2800
1 2015-05-05 15:00:00 2 NaN NaN NaN 2680
2 2015-05-05 15:00:00 3 989 20 -11 2680
3 2015-05-05 15:00:00 4 1022 60 -76 2600
4 2015-05-05 15:00:00 5 1046 -3 -239 2623

编辑:这是 JoeCondron 建议的编辑,这可能是比我更好的答案。我将在此处添加它,直到他将其添加为答案,因为我不希望它丢失:

df.groupby('id', as_index=False).fillna(method='ffill')

关于python - 用 pandas 填充最后已知的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30451871/

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