我正在寻找正确的逻辑,使用python中的pandas将两列与来自.xlsx文件的相关数据组合在一起。它类似于帖子:Merge 2 columns in pandas into one columns that have data in python,除了我还想在组合列时转换数据,因此它不是两列的真正合并。我想能够说"如果列wbc_na有值"检查"在第x行,地点"不可用"在列wbc"下的第x行中。一旦合并,我想放弃专栏" wbc_na"自从" wbc"现在包含我需要的所有信息。例如:
input:
ID,wbc, wbc_na
1,9.0,-
2,NaN,checked
3,10.2,-
4,8.8,-
5,0,checked
输出:
ID,wbc
1,9.0
2,Not available
3,10.2
4,8.8
5,Not available
感谢您的建议。
答案 0 :(得分:2)
您可以使用loc
查找列' wbc_na'被检查'并为那些行指定列' wbc'值:
In [18]:
df.loc[df['wbc_na'] == 'checked', 'wbc'] = 'Not available'
df
Out[18]:
ID wbc wbc_na
0 1 9 -
1 2 Not available checked
2 3 10.2 -
3 4 8.8 -
4 5 Not available checked
[5 rows x 3 columns]
In [19]:
# now drop the extra column
df.drop(labels='wbc_na', axis=1, inplace=True)
df
Out[19]:
ID wbc
0 1 9
1 2 Not available
2 3 10.2
3 4 8.8
4 5 Not available
[5 rows x 2 columns]
答案 1 :(得分:1)
您还可以使用列表解析来重新分配列wbc中的值:
data = pd.DataFrame({'ID': [1,2,3,4,5], 'wbc': [9, np.nan, 10, 8, 0], 'wbc_nan': ['-', 'checked', '-', '-', 'checked']})
data['wbc'] = [(item if data['wbc_nan'][x] != 'checked' else 'Not available') for x, item in enumerate(data['wbc'])]
data = data.drop('wbc_nan', axis=1)