将来自两列的数据合并为一列,除非第二列已经被pandas占用

2024-10-02 14:27:00 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我在一个数据框中有两列,其中一列是不完整的。在

df = pd.DataFrame({'a': [1, 2, 3, 4], 'b':[5, '', 6, '']})

df
Out: 
      a   b
0     1   5
1     2   
2     3   6
3     4

有没有一种方法可以用a列中的相应值填充b列中的空值,同时保留b列的其余部分不变? 这样就可以在不遍历列的情况下获得?在

^{pr2}$

我想你可以用apply方法,但我不确定。作为参考,我处理的数据集相当大(appx1gb),这就是为什么迭代-我的第一次尝试不是一个好主意。在


Tags: 数据方法dataframedf情况out主意pd
3条回答

您可以使用pd.Series.where使用df.b的布尔版本,因为''解析为False

df.assign(b=df.b.where(df.b.astype(bool), df.a))

   a  b
0  1  5
1  2  2
2  3  6
3  4  4

如果空格是空字符串,则可以

In [165]: df.loc[df['b'] == '', 'b'] = df['a']

In [166]: df
Out[166]:
   a  b
0  1  5
1  2  2
2  3  6
3  4  4

但是如果空白是NaNs,则可以使用fillna

^{pr2}$

你可以用np.哪里要计算df.b,如果它不为空,则保留其值,否则使用df.a。在

df.b=np.where(df.b,df.b,df.a)

df
Out[33]: 
   a  b
0  1  5
1  2  2
2  3  6
3  4  4

相关问题 更多 >