【发布时间】:2022-01-08 22:18:06
【问题描述】:
我有以下数据框,
f1 f2 f3 f4 f5 f6 f7
0 -0.004446 59.763107 x0 0 60.029999 59.160000 -0.014493
1 -0.003414 113.212220 x1 0 113.599998 113.650002 0.000440
2 -0.013123 36.435513 x2 1 36.919998 36.889999 -0.000813
3 0.003558 68.854090 x3 0 68.420158 68.410179 -0.000146
4 -0.006840 23.021446 x4 0 23.180000 23.100000 -0.003451
... ... ... ... ... ... ... ...
145 0.000724 253.113110 x5 1 252.929993 247.210007 -0.022615
146 0.006567 128.236680 x6 0 127.400002 127.059998 -0.002669
147 -0.009016 610.079200 x7 1 615.630005 605.369995 -0.016666
148 -0.011290 165.173920 x8 0 167.059998 158.300003 -0.052436
149 0.021474 358.496370 x9 0 350.959991 343.329987 -0.021740
基本上,对于列 f4,将 0 视为否定或 False,将 1 视为肯定或 True。
如果列 f1、f4 和 f7 中的值全部为负或全部为正,则该行的测试列应返回 true,否则应返回 false。
我想创建一个名为“测试”的新列,根据我的条件显示True 或False。如果在任何情况下,其中一个不匹配(不是全部为真或不是全部为假),它将显示False。
我可以让以下代码使用 2 列,
df.loc[:,'test'] = df['f1'].ge(0).eq(df['f4'])
而且效果很好。
但是,如果我尝试像这样链接它以添加 f7 列,
df.loc[:,'test'] = df['f1'].ge(0).eq(df['f4']).eq(df['f7'].ge(0))
结果是错误的。
我希望测试列看起来像这样,
f1 f2 f3 f4 f5 f6 f7 test
0 -0.004446 59.763107 x0 0 60.029999 59.160000 -0.014493 True
1 -0.003414 113.212220 x1 0 113.599998 113.650002 0.000440 False
2 -0.013123 36.435513 x2 1 36.919998 36.889999 -0.000813 False
3 0.003558 68.854090 x3 0 68.420158 68.410179 -0.000146 False
4 -0.006840 23.021446 x4 0 23.180000 23.100000 -0.003451 True
... ... ... ... ... ... ... ...
145 0.000724 253.113110 x5 1 252.929993 247.210007 -0.022615 False
146 0.006567 128.236680 x6 0 127.400002 127.059998 -0.002669 False
147 -0.009016 610.079200 x7 1 615.630005 605.369995 -0.016666 False
148 -0.011290 165.173920 x8 0 167.059998 158.300003 -0.052436 True
149 0.021474 358.496370 x9 0 350.959991 343.329987 -0.021740 False
如何让代码按我想要的方式工作?
【问题讨论】:
-
你能试试
df[['f1', 'f4', 'f7']].ge(0).sum(axis=1).isin([0, 3])吗? -
@Marat 那行不通,因为 f4 必须是 1 不大于或等于 0?
-
那么,
(df['f4'] + df[['f1', 'f7']].ge(0)).sum(axis=1).isin([0, 3]) -
@Marat 现在一切都变得真实了
-
我检查了你的求和公式,结果都是 NaN
标签: python pandas boolean boolean-logic