Python 如何基于“创建熊猫数据”框架列;如果某一列中的任何观察值符合条件,则为“真”;
我有一个变量,如果其包含组中的任何项满足条件,我想将其定义为Python 如何基于“创建熊猫数据”框架列;如果某一列中的任何观察值符合条件,则为“真”;,python,pandas,Python,Pandas,我有一个变量,如果其包含组中的任何项满足条件,我想将其定义为True。例如,在下面的.csv框架中,与我正在查看的条件相对应的列D对于a==1的所有行都是真的,因为它在第一行中是真的,False对于a==4因为它在那里的唯一一行中是假的,True用于A==6,因为有两个值是True,而False用于A==8的所有行,因为没有一个值是真的 A,B,C 1,2,True 1,4,False 1,5,False 4,5,False 6,7,True 6,4,False 6,5,True 8,9,Fal
True
。例如,在下面的.csv
框架中,与我正在查看的条件相对应的列D
对于a==1
的所有行都是真的,因为它在第一行中是真的,False
对于a==4
因为它在那里的唯一一行中是假的,True
用于A==6
,因为有两个值是True
,而False
用于A==8
的所有行,因为没有一个值是真的
A,B,C
1,2,True
1,4,False
1,5,False
4,5,False
6,7,True
6,4,False
6,5,True
8,9,False
8,11,False
8,20,False
我尝试过使用.any()
方法,但它始终返回空数据帧。您可以尝试
In [7]: df.C.groupby(df.A).max()
Out[7]:
A
1 True
4 False
6 True
8 False
Name: C, dtype: bool
你的问题没有具体说明如果某些规则与其他规则相矛盾,例如,如果还有一行,应该怎么办
1,2,False
上面的代码仍然会决定1的值为True
,正如某些行所做的那样
1,2,True
您可以通过将上面的max
更改为min
,将其更改为要求所有行必须为True
最后,要根据结果添加一个新列,您可以
合并
:
pd.merge(
df,
df.C.groupby(df.A).max().reset_index().rename(columns={'C': 'is_true'}))
您可以在
A
上分组,然后使用transform
,它保持与原始数据帧相同的形状。应用lambda
函数,测试列C
中对应组的任何成员是否为真
df['D'] = df.groupby('A').C.transform(lambda group: group.any())
>>> df
A B C D
0 1 2 True True
1 1 4 False True
2 1 5 False True
3 4 5 False False
4 6 7 True True
5 6 4 False True
6 6 5 True True
7 8 9 False False
8 8 11 False False
9 8 20 False False
如果有一行
1,2,False
,那么我仍然会将其标记为True,因为其中一行是True。这似乎就是我要寻找的。如果C
不是纯布尔值,而是一堆整数,我想检查C==2
的条件,我该怎么做?我还没有弄清楚如何将这些参数放入any()
函数中。lambda group:group==2
。df.C==2也能用吗?太好了。这正是我想要的。谢谢我不这么认为,因为它需要对每个组都是正确的,而不是对整个数据帧。