为了账号安全,请及时绑定邮箱和手机立即绑定

基于条件的新列值

基于条件的新列值

慕尼黑的夜晚无繁华 2023-12-20 16:12:15
我有一个这样的数据集。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


查看完整回答
反对 回复 2023-12-20
?
慕森王

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'


查看完整回答
反对 回复 2023-12-20
?
繁星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'


查看完整回答
反对 回复 2023-12-20
  • 3 回答
  • 0 关注
  • 69 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信