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

根据其他列的值将值分配给数据框列的正确方法

根据其他列的值将值分配给数据框列的正确方法

繁花不似锦 2022-12-06 16:39:05
我有一个看起来像这样的数据框:   a     b      c0  A   1.0   10.01  B   2.0   20.02  C   3.0   30.03  A   4.0   40.04  B   5.0   50.05  C   6.0   60.06  A   7.0   70.07  B   8.0   80.08  C   9.0   90.09  A  10.0  100.0我想创建一个 'd' 列,其值取决于 'a',这样如果 'a' 列的值在 ['A','B'] 中,则 'd' 列获取 'b' 中的值或否则它获得'c'中的值。我想要的结果是:   a     b      c     d0  A   1.0   10.0   1.01  B   2.0   20.0   2.02  C   3.0   30.0  30.03  A   4.0   40.0   4.04  B   5.0   50.0   5.05  C   6.0   60.0  60.06  A   7.0   70.0   7.07  B   8.0   80.0   8.08  C   9.0   90.0  90.09  A  10.0  100.0  10.0我努力了:df["d"] = np.nanfor i in range(df.shape[0]):    if df.a.iloc[i] in ['A','B']:        df.d.iloc[i] = df.b.iloc[i]    elif df.a.iloc[i] in ['C']:        df.d.iloc[i] = df.c.iloc[i]这给了我想要的答案,但我得到了错误,“SettingWithCopyWarning:试图在 DataFrame 的切片副本上设置一个值”我也知道 for 循环并不理想,所以我尝试使用布尔掩码来执行此操作,但是print(df.a in ['A','B'])给我警告,“ValueError:系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。”a) 修复 for 循环或 b) 用更优雅的东西替换 for 循环的最佳方法是什么?我花了一个小时通过 SO,但我找不到针对我的特定问题的好答案。任何帮助表示赞赏。
查看完整描述

2 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

您可以使用np.where

In [1696]: df['d'] = np.where(df['a'].isin(['A', 'B']), df['b'], df['c'])     

In [1697]: df 

Out[1697]: 

   a     b      c     d

0  A   1.0   10.0   1.0

1  B   2.0   20.0   2.0

2  C   3.0   30.0  30.0

3  A   4.0   40.0   4.0

4  B   5.0   50.0   5.0

5  C   6.0   60.0  60.0

6  A   7.0   70.0   7.0

7  B   8.0   80.0   8.0

8  C   9.0   90.0  90.0

9  A  10.0  100.0  10.0


查看完整回答
反对 回复 2022-12-06
?
九州编程

TA贡献1785条经验 获得超4个赞

您可以使用isin和np.select:


df['d'] = np.select( (df.a.isin(['A','B']), df.a.eq('C')),

                    (df.b, df.c), np.nan)

如果a列A,B,C仅包含示例数据中所示的值,您可以简单地使用np.where:


df['d'] = np.where(df.a.isin(['A','B']), df.b, df.c)


# or

# df['d'] = np.where(df.a.eq('C'), df.c, df.b)


查看完整回答
反对 回复 2022-12-06
  • 2 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

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