我有一个看起来像这样的数据框:
a b c
0 A 1.0 10.0
1 B 2.0 20.0
2 C 3.0 30.0
3 A 4.0 40.0
4 B 5.0 50.0
5 C 6.0 60.0
6 A 7.0 70.0
7 B 8.0 80.0
8 C 9.0 90.0
9 A 10.0 100.0
我想创建一个 'd' 列,其值取决于 'a',这样如果 'a' 列的值在 ['A','B'] 中,则 'd' 列获取 'b' 中的值或否则它获得'c'中的值。我想要的结果是:
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
我努力了:
df["d"] = np.nan
for 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,但我找不到针对我的特定问题的好答案。任何帮助表示赞赏。
繁花不似锦
鸿蒙传说
九州编程
随时随地看视频慕课网APP
相关分类