[英]Returning the last valid (non-null) value from a pandas DataFrame
[英]Replace null with last non-null value in pandas dataframe
我知道这个问题之前已经被问过好几次了,但是我遇到了一个奇怪的行为,因此这个问题。
输入df
A B C
USA 21-07-2018
USA 22-07-2018
USA 23-07-2018 1
USA 24-07-2018 1
USA 25-07-2018 1
USA 26-07-2018 1
USA 27-07-2018 1
USA 28-07-2018
USA 29-07-2018
USA 30-07-2018 1
USA 31-07-2018 1
USA 01-08-2018 1
USA 02-08-2018 1
USA 03-08-2018 1
USA 04-08-2018
USA 05-08-2018
USA 06-08-2018 1
USA 07-08-2018 1
USA 08-08-2018 1
USA 09-08-2018 1
USA 10-08-2018 1
USA 11-08-2018
USA 12-08-2018
USA 13-08-2018 1
USA 14-08-2018 1
USA 15-08-2018 1
USA 16-08-2018 1
USA 17-08-2018 1
USA 18-08-2018
USA 19-08-2018
我尝试了以下两种方法
第一种方法
df['C'] = df['C'].fillna(method='ffill')
第二种方法
df['C'] = df['C'].ffill()
它们都产生了相同的数据帧(Output_df)
A B C
USA 21-07-2017 1
USA 22-07-2017 3010.77
USA 23-07-2017 3010.77
USA 24-07-2017 1
USA 25-07-2017 1
USA 26-07-2017 1
USA 27-07-2017 1
USA 28-07-2017 1
USA 29-07-2017 2995.23
USA 30-07-2017 2995.23
USA 31-07-2017 1
USA 01-08-2017 1
USA 02-08-2017 1
USA 03-08-2017 1
USA 04-08-2017 1
USA 05-08-2017 2974.39
USA 06-08-2017 2974.39
USA 07-08-2017 1
USA 08-08-2017 1
USA 09-08-2017 1
USA 10-08-2017 1
USA 11-08-2017 1
为什么我会得到像 3010.77、2974.39 等这样的值。这是否在某处被平均(输入 df 相当大 > 25k 行)?
我期望它是什么(Expected_df)
A B C
USA 21-07-2018 1
USA 22-07-2018 1
USA 23-07-2018 1
USA 24-07-2018 1
USA 25-07-2018 1
USA 26-07-2018 1
USA 27-07-2018 1
USA 28-07-2018 1
USA 29-07-2018 1
USA 30-07-2018 1
USA 31-07-2018 1
USA 01-08-2018 1
USA 02-08-2018 1
USA 03-08-2018 1
USA 04-08-2018 1
USA 05-08-2018 1
USA 06-08-2018 1
USA 07-08-2018 1
USA 08-08-2018 1
USA 09-08-2018 1
USA 10-08-2018 1
USA 11-08-2018 1
USA 12-08-2018 1
USA 13-08-2018 1
USA 14-08-2018 1
USA 15-08-2018 1
USA 16-08-2018 1
USA 17-08-2018 1
USA 18-08-2018 1
USA 19-08-2018 1
再举一个我预期的 output 的例子
输入df
A B C
AUS 21-07-2017 1.262584
AUS 22-07-2017
AUS 23-07-2017
AUS 24-07-2017 1.258671
AUS 25-07-2017 1.256456
AUS 26-07-2017 1.263913
AUS 27-07-2017 1.249957
AUS 28-07-2017 1.256032
AUS 29-07-2017
AUS 30-07-2017
AUS 31-07-2017 1.254626
AUS 01-08-2017 1.254064
AUS 02-08-2017 1.255136
AUS 03-08-2017 1.259949
AUS 04-08-2017 1.254466
AUS 05-08-2017
AUS 06-08-2017
AUS 07-08-2017 1.263796
AUS 08-08-2017 1.259692
AUS 09-08-2017 1.268349
AUS 10-08-2017 1.269008
AUS 11-08-2017 1.271738
(预期)输出df
A B C
AUS 21-07-2017 1.262584
AUS 22-07-2017 1.262584
AUS 23-07-2017 1.262584
AUS 24-07-2017 1.258671
AUS 25-07-2017 1.256456
AUS 26-07-2017 1.263913
AUS 27-07-2017 1.249957
AUS 28-07-2017 1.256032
AUS 29-07-2017 1.256032
AUS 30-07-2017 1.256032
AUS 31-07-2017 1.254626
AUS 01-08-2017 1.254064
AUS 02-08-2017 1.255136
AUS 03-08-2017 1.259949
AUS 04-08-2017 1.254466
AUS 05-08-2017 1.254466
AUS 06-08-2017 1.254466
AUS 07-08-2017 1.263796
AUS 08-08-2017 1.259692
AUS 09-08-2017 1.268349
AUS 10-08-2017 1.269008
AUS 11-08-2017 1.271738
我认为您的列中有whitespaces
。 您需要用numpy.nan
替换那些。
如果您不确定那里有多少个空白,您可以这样做:
import numpy as np
df['C'].replace(r'^\s*$', np.nan, regex=True, inplace=True)
然后使用ffill()
来获得预期的行为。
df['C'] = df['C'].ffill()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.