我有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
我怎样才能做到这一点?
答案 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