Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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 3.x 返回共享值且至少有一个条件与另一个条件匹配的行_Python 3.x_Pandas_Logic - Fatal编程技术网

Python 3.x 返回共享值且至少有一个条件与另一个条件匹配的行

Python 3.x 返回共享值且至少有一个条件与另一个条件匹配的行,python-3.x,pandas,logic,Python 3.x,Pandas,Logic,我正在寻找一个优雅而高效的解决方案。 我找到了一个又快又脏的解决办法。但我想知道是否还有更“熊猫式”的方法 我有一个pd数据帧: Id Value T4 0.4 T5 0.3 T5 0.9 T5 1 T6 0.8 T7 0.2 T7 0.8 我想检索至少出现两次且至少有一行值的id我找不到更有效的内置函数,但我想到了以下几点: counts = df['Id'].value_counts() filtered = df[(df['Value'] &

我正在寻找一个优雅而高效的解决方案。 我找到了一个又快又脏的解决办法。但我想知道是否还有更“熊猫式”的方法

我有一个pd数据帧:

Id   Value
T4    0.4
T5    0.3
T5    0.9
T5    1
T6    0.8
T7    0.2
T7    0.8

我想检索至少出现两次且至少有一行值的id我找不到更有效的内置函数,但我想到了以下几点:

counts = df['Id'].value_counts()
filtered = df[(df['Value'] <= 0.4) & ([counts[i] > 2 for i in df['id']])]
counts=df['Id'].value_counts()
过滤=df[(df['id']]中i的df['Value']2]

我找不到更有效的内置函数,但我想到的是:

counts = df['Id'].value_counts()
filtered = df[(df['Value'] <= 0.4) & ([counts[i] > 2 for i in df['id']])]
counts=df['Id'].value_counts()
过滤=df[(df['id']]中i的df['Value']2]

这可以通过
groupby
完成:

g = df.groupby('Id')['Value']

df[g.transform('size').ge(2) & g.transform('min').le(0.4)]
输出:

   Id  Value
1  T5    0.3
2  T5    0.9
3  T5    1.0
5  T7    0.2
6  T7    0.8
如果您只需要
ID
,我们可以:

g = df.groupby('Id')['Value'].agg(['size','min'])
g.index[g['size'].ge(2) & g['min'].le(0.4)]
其中:

Index(['T5', 'T7'], dtype='object', name='Id')

这可以通过
groupby
完成:

g = df.groupby('Id')['Value']

df[g.transform('size').ge(2) & g.transform('min').le(0.4)]
输出:

   Id  Value
1  T5    0.3
2  T5    0.9
3  T5    1.0
5  T7    0.2
6  T7    0.8
如果您只需要
ID
,我们可以:

g = df.groupby('Id')['Value'].agg(['size','min'])
g.index[g['size'].ge(2) & g['min'].le(0.4)]
其中:

Index(['T5', 'T7'], dtype='object', name='Id')