The*_*849 3 python dataframe pandas
我有一个像这样的pandas数据帧:
df = pd.DataFrame({"A": [1, 2, 3, 4, 5, 6], "B": [100, 200, 300, 400, 500,
600]})
Run Code Online (Sandbox Code Playgroud)
如果满足某些条件,我想创建一个具有某些值的新列.问题是:这些是多个条件&和|.我知道我只能用两个条件然后多次df.loc调用才能做到这一点,但由于我的实际数据集非常庞大,变量可以采用许多不同的值,我想知道是否可以在一次df.loc调用中执行此操作.我np.where之前也尝试过,但发现df.loc一般都比较容易,所以如果我坚持下去就会很好.
我试过的代码是
df.loc[(df.A == 1) | (df.A == 2) & (df.B == 600) | (df.B == 200), "C"] =
"1or2and600or200"
Run Code Online (Sandbox Code Playgroud)
这给了我
print(df)
A B C
0 1 100 1or2and600or200
1 2 200 1or2and600or200
2 3 300 NaN
3 4 400 NaN
4 5 500 NaN
5 6 600 NaN
Run Code Online (Sandbox Code Playgroud)
然而,这不是我想要的,因为df.loc可能只考虑前两个条件.所以,在这个代码示例中,我希望值1or2and600or200只在第一行,而不是在第二行.这可能吗?
非常感谢.
一切都很好,除了你需要照顾额外的括号.
df.loc[((df.A == 1) | (df.A == 2)) & ((df.B == 600) | (df.B == 200)), "C"] = "1or2and600or200"
Run Code Online (Sandbox Code Playgroud)
您还可以继续.isin查看@AndrewF所提及的更清晰简洁的图片
df.loc[df.A.isin([1, 2]) & df.B.isin([600, 200]), 'C'] = "1or2and600or200"
Run Code Online (Sandbox Code Playgroud)
另外,您给定的条件,它会出现在第二排,因为这就是你必须200在B