我有一个这样的数据集。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 C1 1 type 11 3 type 13 2 Nan4 2 Nan还有其他办法吗?提前致谢
3 回答
临摹微笑
TA贡献1982条经验 获得超2个赞
使用numpy.where
:
In [1517]: import numpy as np
In [1518]: df['C'] = np.where(df.A.eq(1) & df.B.isin([1,3]), 'type 1', np.nan)
In [1519]: df
Out[1519]:
A B C
0 1 1 type 1
1 1 3 type 1
2 3 2 nan
3 4 2 nan
慕森王
TA贡献1777条经验 获得超3个赞
其他方法可能是尝试使用.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
TA贡献1797条经验 获得超4个赞
这是一个可能的解决方案,除了 pandas 之外不使用任何库:
df['C'] = pd.Series(index=range(len(df)), dtype='float') df['C'][df['A'] == 1 & df['B'].isin((1, 3))] = 'type 1'
添加回答
举报
0/150
提交
取消