首页 > 解决方案 > 如果组中第一行和最后一行之间的差异超过值,熊猫会删除组

问题描述

我有一个数据框df:

df = pd.DataFrame({})
df['X'] = [3,8,11,6,7,8]
df['name'] = [1,1,1,2,2,2]

    X  name
0   3     1
1   8     1
2  11     1
3   6     2
4   7     2
5   8     2

对于 'name' 中的每个组,如果该组的第一行和最后一行之间的差异以绝对方式小于指定值 d_dif,则希望删除该组:

例如,当 d_dif=5 时,我想得到:

    X  name
0   3     1
1   8     1
2  11     1

标签: python-3.xpandasfiltering

解决方案


如果您的数据越来越多X,您可以使用groupby().transform()np.ptp

threshold = 5
ranges = df.groupby('name')['X'].transform(np.ptp)

df[ranges > threshold]

如果您只关心firstand last,那么transform只需firstand last

threshold = 5
groups = df.groupby('name')['X']

ranges = groups.transform('last') - groups.transform('first')

df[ranges.abs() > threshold]

推荐阅读