【发布时间】:2020-12-07 12:02:32
【问题描述】:
我有 DF:
col1| col2|
"a"| "stg"|
"b"| "etc"|
"a"| "xyz"|
"b"| "wha"|
我需要下一个输出:
col1| col2| col3|
"a"| "stg"|"stg:1"|
"b"| "etc"|"etc:2"|
"a"| "xyz"|"xyz:1"|
"b"| "wha"|"wha:2"|
所以基本上我有两列只有字符串作为变量我需要的是第三列,它检查 col1。如果它是一个 'a' 它返回 col2.value + ':1' 并且如果它是一个 b 它返回 col2.value + ':2' 作为一个单一的字符串 我试图写一个函数,其中
def return_stg(x):
if df[df[col2] == x][col1] == "a":
return x + ':1'
if df[df[col2] == x][col1] == "b":
return x + ':2'
df[col3] = df[col2].apply(return_stg)
但它会抛出一个 ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
但如果我只输入 df[df[col2] == "stg"][col1] == "a" 来检查它,它会返回 True,所以我看不出它是如何模棱两可的
基本上我需要对每一行进行检查,检查 col1 中的值,如果它是 'a',则返回 col2 与字符串 ':1' 等连接的值
【问题讨论】:
-
所以你需要
apply的循环慢速解决方案? -
我问是因为有点惊讶,这是什么原因?