[英]Merging two columns in a pandas DataFrame
给定以下DataFrame
:
A B
0 -10.0 NaN
1 NaN 20.0
2 -30.0 NaN
我要合并列A
和B
,填充NaN
在列单元A
与来自列中的值B
然后删除列B
,产生一个DataFrame
是这样的:
A
0 -10.0
1 20.0
2 -30.0
我设法通过使用iterrows()
函数解决了这个问题。
完整的代码示例:
import numpy as np
import pandas as pd
example_data = [[-10, np.NaN], [np.NaN, 20], [-30, np.NaN]]
example_df = pd.DataFrame(example_data, columns = ['A', 'B'])
for index, row in example_df.iterrows():
if pd.isnull(row['A']):
row['A'] = row['B']
example_df = example_df.drop(columns = ['B'])
example_df
这似乎工作正常,但我在iterrows()
的文档中找到了以下信息:
您永远不应修改要迭代的内容。
看来我做错了。
为了达到相同的结果,什么是更好/推荐的方法?
将Series.fillna
与Series.to_frame
Series.fillna
使用:
df = df['A'].fillna(df['B']).to_frame()
#alternative
#df = df['A'].combine_first(df['B']).to_frame()
print (df)
A
0 -10.0
1 20.0
2 -30.0
如果更多列且每行需要第一个非缺失值,请使用一个字段DataFrame
一个元素列表按元素列表选择第一列,以回填缺失值:
df = df.bfill(axis=1).iloc[:, [0]]
print (df)
A
0 -10.0
1 20.0
2 -30.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.