基于条件的新列值

我有一个这样的数据集。


df = pd.DataFrame({"A" :[1,1,3,4], "B": [1,3,2,2]})

我想创建一个新列,如果 A = 1 & B =(1,3) 我使用,.loc则类型为 1 的 C ,我的代码是


df.loc[(df['A'] == 1)&(df['B'] == 1), 'C'] = 'type 1'

df.loc[(df['A'] == 1)&(df['B'] == 3), 'C'] = 'type 1'

上面的方法有效,但是当我使用时


df.loc[(df['A'] == 1)&(df['B'] == (1,3)), 'C'] = 'type 1'

什么也没有发生,它没有显示错误,列也没有更新。


预期输出是


A   B   C

1   1   type 1

1   3   type 1

3   2   Nan

4   2   Nan

还有其他办法吗?


提前致谢


慕尼黑的夜晚无繁华
浏览 116回答 3
3回答

临摹微笑

使用numpy.where:In [1517]: import numpy as npIn [1518]: df['C'] = np.where(df.A.eq(1) & df.B.isin([1,3]), 'type 1', np.nan)In [1519]: dfOut[1519]:    A  B       C0  1  1  type 11  1  3  type 12  3  2     nan3  4  2     nan

慕森王

其他方法可能是尝试使用.eval类似于此处的答案:df.loc[df.eval('A ==1 and B in [1,3]'), 'C']= 'type 1'如果您想修复现有的代码,您可以尝试用以下命令分隔|:df.loc[(df['A'] == 1)&((df['B'] ==1) | (df['B'] ==3)), 'C'] = 'type 1'

繁星coding

这是一个可能的解决方案,除了 pandas 之外不使用任何库:df['C'] = pd.Series(index=range(len(df)), dtype='float') df['C'][df['A'] == 1 & df['B'].isin((1, 3))] = 'type 1'
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python