如何使用另一列的子组动态更改pandas数据中的过滤器?

时间:2014-06-20 07:31:55

标签: python pandas

我有3列(公司,market_capitalization和debt_ratio)。我想根据市场资本化的子群获得债务比率的统计数据。

我创建了一个函数'subgroups_creation(column,n)',其中column是我要分组的列,market_capitalization,n是我想要创建的子组数。该函数取列的范围并将其划分为大小相等的子组。结果是一个类似于下面的字典。

Sub-Group  market_capitalization
1          :300
2          :639
3          :979

所以,举例来说,我想知道市值为300到639百万的公司的债务比率的平均值。虽然我知道如何按特定值过滤以及如何在此之后获取统计信息,但出于研究目的,我将不断更改子组的数量,因此我希望这些过滤器动态更新以更改子组的数量。

结果将是子组数= 5

Subgroup  market_capitalization     mean debt_ration
  1             300-638              0.25
  2             639-978              0.32

子组数= 7

Subgroup  market_capitalization     mean debt_ration
  1             300-541              0.21
  2             542-785              0.40

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

一些虚拟数据:

In [275]: df = pd.DataFrame({'company': list('abcdefg'), 
                             'market_cap': np.linspace(100, 500, 7), 
                             'debt_ratio': [.85,.34,.05,.34,.46,.234,.34]})

我不是100%明确你的问题,但我认为你可能需要pandas cut功能,它将数据分组。下面的代码根据market_cap,groups将数据分为3组,并计算平均负债率。

In [282]: df.groupby(pd.cut(df['market_cap'], 3))['debt_ratio'].mean()
Out[282]: 
market_cap
(99.6, 233.333]       0.413333
(233.333, 366.667]    0.400000
(366.667, 500]        0.287000
Name: debt_ratio, dtype: float64

要拥有不同数量的组,只需传递一个不同的参数即可。

In [283]: df.groupby(pd.cut(df['market_cap'], 5))['debt_ratio'].mean()
Out[283]: 
market_cap
(99.6, 180]    0.595
(180, 260]     0.050
(260, 340]     0.340
(340, 420]     0.460
(420, 500]     0.287
Name: debt_ratio, dtype: float64