首页 > 解决方案 > 调整 for 循环以仅根据 df 中的出现频率返回值

问题描述

我有一个数据框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)创建子数据帧。

如何调整上面的代码以获得此结果?

谢谢你。

标签: pythonpandasdataframefor-loop

解决方案


将您的代码调整为

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')}

推荐阅读