[英]Pandas: Join two columns in dataframe (without creating two)
我有以下数据:
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
我尝试使用以下解决方案 ,并且按照我需要的方式进行了工作。 最终发生的是,我将拥有数据框A,然后具有数据框B。B将包含我的新列,而A将保持不变。
我曾尝试使用.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
为了避免创建任何新的临时变量或数据帧,您可以将“ 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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.