【发布时间】:2020-02-18 10:09:18
【问题描述】:
我对 Python 和数据科学真的很陌生。
我有一个包含 100K+ 行的数据集,我在这个数据集上有两列。
第一个是Datetime列,我们命名为A,最后一个是Integer,我们命名为B。
我的数据集按 A 列排序。
在我的数据集中,B 的一些值是 NaN。
我想通过这样做来填充我的 NaN 值:
对于具有 NaN B 值的第 i 行: 如果(我的第 i 行之前的最新无 NaN B 值 - 第 i 行之后的第一个无 NaN B 值)== 0 将第 i 行的 B 值设置为“我的第 i 行之前的最新无 NaN B 值” 否则将其设置为“我的第 i 行之前的最新无 NaN B 值”-“我的第 i 行之前的最新无 NaN B 值”的 A 列与我的第 i 行的 A 列之间的差异(以秒为单位)
让我用一个例子来解释一下自己:
我的数据集如下所示:
A B
0 2019-03-13 08:12:20 10.0
1 2019-03-13 08:12:21 NaN
2 2019-03-13 08:12:22 NaN
3 2019-03-13 08:12:23 10.0
4 2019-03-13 08:12:24 NaN
5 2019-03-13 08:12:25 NaN
6 2019-03-13 08:12:26 7.0
最后我希望它看起来像这样:
A B
0 2019-03-13 08:12:20 10.0
1 2019-03-13 08:12:21 10.0
2 2019-03-13 08:12:22 10.0
3 2019-03-13 08:12:23 10.0
4 2019-03-13 08:12:24 9.0
5 2019-03-13 08:12:25 8.0
6 2019-03-13 08:12:26 7.0
(行 id=1 的列 B)和(行 id=2 的列 B)是 10,因为(行 id=0 的列 B)=(行 id=3 的列 B)。 (行 id=4 的列 B)是 9,因为(行 id=3 的列 B)=/=(行 id=6 的列 B)和(行 id=3 的列 B)-(time_diff(列 A 的行 id=3,行 id=4)) 的 A 列。
我能做的最好的是将 NaN 设置为最新的已知值,但这真的不是我想要做的。
df=pd.DataFrame({'A': ["2019-03-13 08:12:20", "2019-03-13 08:12:21", "2019-03-13 08:12:22", "2019-03-13 08:12:23", "2019-03-13 08:12:24", "2019-03-13 08:12:25"], 'B': [10, 10, 10, 9, 8, 7]})
df['B'] = df['B'].replace({'B': {0: np.nan}}).ffill()
print(df)
你们有什么干净的方法来实现这一点吗?
【问题讨论】:
标签: python pandas data-science