首页 > 解决方案 > 根据出现频率过滤熊猫列

问题描述

我的df:

data = [
    {'Part': 'A', 'Value': 10, 'Delivery': 10},
    {'Part': 'B', 'Value': 12, 'Delivery': 8.5},
    {'Part': 'C', 'Value': 10, 'Delivery': 10.1},
    {'Part': 'D', 'Value': 10, 'Delivery': 10.3},
    {'Part': 'E', 'Value': 11, 'Delivery': 9.2},
    {'Part': 'F', 'Value': 15, 'Delivery': 7.3},
    {'Part': 'G', 'Value': 10, 'Delivery': 10.1},
    {'Part': 'H', 'Value': 12, 'Delivery': 8.1},
    {'Part': 'I', 'Value': 12, 'Delivery': 8.0},
    {'Part': 'J', 'Value': 10, 'Delivery': 10.2},
    {'Part': 'K', 'Value': 8,  'Delivery': 12.5}    
]

df = pd.DataFrame(data)

我希望从给定的数据帧中过滤出一个数据帧,以便它只包含最频繁出现的“值”。

预期输出:

data = [
    {'Part': 'A', 'Value': 10, 'Delivery': 10},
    {'Part': 'C', 'Value': 10, 'Delivery': 10.1},
    {'Part': 'D', 'Value': 10, 'Delivery': 10.3},
    {'Part': 'G', 'Value': 10, 'Delivery': 10.1},
    {'Part': 'J', 'Value': 10, 'Delivery': 10.2}
]

df_output = pd.DataFrame(data)

有什么办法吗?

标签: pandas

解决方案


使用boolean indexingwithSeries.mode并通过以下方式选择第一个值Series.iat

df1 = df[df['Value'].eq(df['Value'].mode().iat[0])]

或按由 创建的 Series 中的第一个索引值进行比较Series.value_counts,因为默认值按计数排序:

df1 = df[df['Value'].eq(df['Value'].value_counts().index[0])]
print (df1)
  Part  Value  Delivery
0    A     10      10.0
2    C     10      10.1
3    D     10      10.3
6    G     10      10.1
9    J     10      10.2

推荐阅读