Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何基于“创建熊猫数据”框架列;如果某一列中的任何观察值符合条件,则为“真”;_Python_Pandas - Fatal编程技术网

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也能用吗?太好了。这正是我想要的。谢谢我不这么认为,因为它需要对每个组都是正确的,而不是对整个数据帧。