我有一些实验的数据,在每个试验中都有一些单独的值,被NA
包围,我想在整个试验中填写这些值:
df = pd.DataFrame({'trial': [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3],
'cs_name': [np.nan, 'A1', np.nan, np.nan, np.nan, np.nan, 'B2',
np.nan, 'A1', np.nan, np.nan, np.nan]})
Out[177]:
cs_name trial
0 NaN 1
1 A1 1
2 NaN 1
3 NaN 1
4 NaN 2
5 NaN 2
6 B2 2
7 NaN 2
8 A1 3
9 NaN 3
10 NaN 3
11 NaN 3
我可以在整个试验中同时使用bfill()
和ffill()
来填充这些值,但我想知道是否有更好的方法来实现这一点。
df['cs_name'] = df.groupby('trial')['cs_name'].ffill()
df['cs_name'] = df.groupby('trial')['cs_name'].bfill()
预期产量:
cs_name trial
0 A1 1
1 A1 1
2 A1 1
3 A1 1
4 B2 2
5 B2 2
6 B2 2
7 B2 2
8 A1 3
9 A1 3
10 A1 3
11 A1 3
另一种方法是使用^{} 和^{} :
这应该比使用ffill和bfill更有效。。。
并使用此项更改
cs_name
列:注意:我认为有一个方法来获取熊猫中的第一个非空对象是很好的增强,在numpy中是an open request,我认为目前没有一个方法(我可能错了!)。。。
如果要避免在某些组只包含NaN时出现的错误,可以执行以下操作(请注意,我更改了df,因此对于trial=1的组只有NaN):
这样,当程序找到某个特定组的所有NaN而不是错误时,就可以输入“No Values to aggregate”(或任何需要的值)。
希望这有帮助:)
费德里科
相关问题 更多 >
编程相关推荐