我真的是Python和Datascience的新手。
我有一个大型数据集(具有10万多行),在此数据集中,我有两列A
和B
。A
是Datetime列,B是字符串。
B列具有一些NaN值,考虑到我的空白B列行和已经填充的B列行在同一天,月份和年份(A列)的情况,我想用最新的已知B列值填充这些NaN值。
我解释自己:
假设这是我的输入:
df=pd.DataFrame({'A': ["2019-03-13 08:12:23", "2019-03-13 07:10:18", "2019-03-20 08:12:23", "2019-03-13 08:12:23", "2019-03-15 10:35:53", "2019-03-20 11:12:23"], 'B': ["B1", "B0", "B13", np.nan, "B10", "B12"]})
A B
0 2019-03-13 08:12:23 B1
1 2019-03-13 07:10:18 B0
2 2019-03-20 08:12:23 B13
3 2019-03-13 08:12:23 NaN
4 2019-03-15 10:35:53 B10
5 2019-03-20 11:12:23 B12
我想用B1(在同一天出现的B值填充NaN值,并且考虑到该“最大时间”不在实际A
列值之前的条件,所以具有最大时间)。
所以我的输出应如下所示:
A B
0 2019-03-13 08:12:23 B1
1 2019-03-13 07:10:18 B0
2 2019-03-20 08:12:23 B13
3 2019-03-13 08:12:23 B1
4 2019-03-15 10:35:53 B10
5 2019-03-20 11:12:23 B12
我试图做到这一点没有成功,我能做的最好的就是使用此方法将NaN Value设置为B13:
df['B']=df['B'].replace({'B': {0: np.nan}}).ffill()
你们能告诉我实现这一目标的最胖,最经济的方法吗?
使用groupby
+ffill
as_date = pd.to_datetime(df.A)
s = np.argsort(as_date)
df['B'] = df.B.loc[s].groupby(as_date.loc[s].dt.date).ffill().loc[df.index]
A B
0 2019-03-13 08:12:23 B1
1 2019-03-13 07:10:18 B0
2 2019-03-20 08:12:23 B13
3 2019-03-13 08:12:23 B1
4 2019-03-15 10:35:53 B10
5 2019-03-20 11:12:23 B12
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句