我有3列(公司、market_capitalization和debt_ratio)。我想根据debt_ratio的子组获得market_capitalization的统计信息。
我创建了一个函数'subgroups_creation(列,n )‘,其中列是我分组的列,market_capitalization,n是我想要创建的子组的数量。该函数接受列的范围,并将其划分为大小相等的子组。其结果是一本如下所示的字典。
Sub-Group market_capitalization
1 :300
2 :639
3 :979例如,我想知道拥有300-6.39亿market_capitalization的公司的market_capitalization平均值。虽然我知道如何通过特定的值进行过滤,以及如何在此之后获取统计数据,但出于研究目的,我将不断地更改子组的数量,因此我希望这些过滤器动态更新,以更改子组的数量。
结果是子群数=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我怎样才能做到这一点?
发布于 2014-06-20 16:46:47
一些虚拟数据:
In [275]: df = pd.DataFrame({'company': list('abcdefg'),
'market_cap': np.linspace(100, 500, 7),
'debt_ratio': [.85,.34,.05,.34,.46,.234,.34]})我对你的问题不完全清楚,但我想你可能想要熊猫cut功能,它将数据打包成组。下面的代码根据market_cap、组将数据分成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: float64https://stackoverflow.com/questions/24322153
复制相似问题