我有以下数据:
Col1 Col2 Col3 Col4
A G K
B L Q
C H M
D N R
E I O
F J P
这就是我想要的:
Col1 NEW Col3
A G K
B Q L
C H M
D R N
E I O
F J P
我尝试过使用following solution,它按照我需要的方式运行。最终发生的是我将拥有数据帧A然后是数据帧B.B将包含我的新列,A将保持不变。
II尝试使用.replace()和.fillna(),但我似乎无法正确使用语法。出于某种原因,我尝试做类似的事情:
csv[Col2] = csv.replace(to_replace=" ", value=csv[Col4]])
我最终让Col4的全部内容覆盖Col2(包括空格)。这似乎发生在.replace()和.fillna()。
我不确定它是否有帮助,但在这些情况下,Col2只会丢失Col4有数据的数据。有什么想法吗?
解
感谢所有回复的人。我现在意识到由于语法上的错误,我一直在追逐我的尾巴。这是我尝试的另一行代码,但无法完成工作。我得到了“一栏覆盖另一栏”的问题(见上文)。
csv[Col2] = csv.fillna(csv[Col4]])
但是在重新审视了John Galt在下面链接的页面后,我觉得我错过了一些东西......然后就像火车一样打击了我。
csv[Col2] = csv[Col2].fillna(csv[Col4]])
这完美无缺。而且我觉得我更加关注可能会更快地解决这个问题。谢谢你的病人!
更新一次
我正在追加有关我的数据框的更多信息,以防将来有人帮助过。
<class 'pandas.core.frame.DataFrame'>
Int64Index: 50000 entries, 0 to 49999
Data columns (total 6 columns):
Col 1 50000 non-null object
Col 2 4652 non-null object
Col 3 50000 non-null object
Col 4 45347 non-null object
Col 5 50000 non-null object
Col 6 50000 non-null object
dtypes: object(6)
memory usage: 1.5+ MB
None
答案 0 :(得分:2)
为避免创建任何新的临时变量或数据帧,您只需将“Col2”替换为新值,然后删除“Col4”。有几种方法可以做到这一点。
Numpy where()
是一个很好的通用解决方案,可以处理''
(空或空白),' '
(空格)或nan
:
df['Col2'] = np.where( df.Col2 == ' ', df.Col4, df.Col2 ) # space
df['Col2'] = np.where( df.Col2.isnull(), df.Col4, df.Col2 ) # blank or nan
@ EdChum的答案也应该有效,而fillna()
可能最简单(如@ JohnGalt的链接),但如果你有空格字符则无效。
df['Col2'] = df['Col2'].fillna(df.Col4)
之后,只需删除'Col4'
df = df.drop('Col4',axis=1)