Python 3.x 返回共享值且至少有一个条件与另一个条件匹配的行
我正在寻找一个优雅而高效的解决方案。 我找到了一个又快又脏的解决办法。但我想知道是否还有更“熊猫式”的方法 我有一个pd数据帧: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'] &
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')