Pandas:基于现有列的值创建新列

4

我有一个包含两列数据的pandas数据框,如下所示:

A      B
Yes    No
Yes    Yes
No     Yes
No     No
NA     Yes
NA     NA

我希望根据这些值创建一个新列,如果任何列的值为Yes,则新列中的值也应为Yes。 如果两个列的值都是No,那么新列的值也将为No。 最后,如果两个列的值都为NA,则新列的输出也将为NA。 上述数据的示例输出如下:

C
Yes
Yes
Yes
No
Yes
NA

我编写了一个循环遍历数据框的长度,并检查每个值以获取新列。 但是,处理1000万条记录需要很长时间。 有没有更快的 Pythonic 方法来实现这一点?


这似乎是极其基本的Pandas功能,有什么特别之处导致它不能根据大量可用的信息解决?请参见[ask],[help/on-topic]。另外,您真的在使用字符串“ Yes”/“ No”而不是实际布尔值吗? - AMC
当然,不要介意这基本上是 https://dev59.com/os-90IgBFxS5KdRjteUd 的重复。 - AMC
3个回答

7

类似于某物

df.fillna('').max(axis=1)
Out[106]: 
0    Yes
1    Yes
2    Yes
3     No
4    Yes
5       
dtype: object

非常好的解决方案! - MarianD

2

尝试:

(df == 'Yes').eval('A | B').astype(str).mask(df['A'].isna() & df['B'].isna())

这会正确输出“Yes”和“No”,但对于“NA”不适用,因为它将“NA”视为“否”。 - Haroon S.

0

另一种方法。虽然是硬编码的

conditions=((df['A']=='Yes')|(df['B']=='Yes'),(df['A']=='No')&(df['B']=='No'),(df['A']=='NaN')&(df['B']=='NaN'))
choicelist=('Yes','No','NaN')
df['C']=np.select(conditions, choicelist)
df

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接