【问题标题】:Adjust for loop to only return values based on frequency of occurence in df调整 for 循环以仅根据 df 中的出现频率返回值
【发布时间】:2020-11-21 08:43:03
【问题描述】:

我有一个数据框df:

index   value   value_count
0       10      1
1       50      2
2       50      2
3       20      2
4       20      2
5       30      2
6       30      2

我想分析不同数据框中的每个唯一值。要创建单独的数据框 (='subdf_{i}'),我使用以下代码:

results = {}

for i, j in enumerate(df.value.unique()):
    results[f'subdf_{i}'] = df[df.value.eq(j)]

这为每个唯一值提供了一个像这样的 subdf:

subdf_1

index   value   value_count
0       10      1

subdf_2

index   value   value_count
1       50      2
2       50      2

subdf_3

...

我不想为我所有的唯一值返回子数据帧,而是只为 3 个最常见的值(即上面示例中的 50、30、20)创建子数据帧。

如何调整我上面的代码以获得这个结果?

谢谢。

【问题讨论】:

    标签: python pandas dataframe for-loop


    【解决方案1】:

    value 列上使用Series.value_counts 并使用切片来获取前三个最常见的列值,然后使用字典推导来存储最常见的前三个subdf

    idx = df['value'].value_counts().index[:3]
    results = {f'subdf_{i}': df[df['value'].eq(v)] for i, v in enumerate(idx, 1)}
    

    结果:

    print(results['subdf_1'])
    
       index  value  value_count
    5      5     30            2
    6      6     30            2
    

    【讨论】:

      【解决方案2】:

      调整你的代码

      df1=df[df.value_count==df.value_count.max()]
      
      results = {}
      
      for i, j in enumerate(df1.value.unique()):
          results[f'subdf_{i}'] = df1[df1.value.eq(j)]
      

      通过使用groupby

      results = {f'subdf_{x}' : y  for x , y in df1.groupby('value')}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-01
        • 2011-11-25
        • 1970-01-01
        • 1970-01-01
        • 2021-05-23
        • 2016-09-03
        • 1970-01-01
        • 2011-09-04
        相关资源
        最近更新 更多