gpt4 book ai didi

python - 将比率字段插入 Pandas 系列

转载 作者:太空宇宙 更新时间:2023-11-03 15:19:16 25 4
gpt4 key购买 nike

我得到了 Pandas 系列:

 countrypat = asiaselect.groupby('Country')['Pattern'].value_counts().groupby(level=0).head(3)   

输出如下所示:

China      abc                1055
def 778
ghi 612
Malaysia def 554
abc 441
ghi 178
[...]

如何插入一个新列(我是否必须将其设为数据框),其中包含数字列与该国家/地区数字总和的比率。因此,对于中国,我想要一个新列,第一行将包含 (1055/(1055+778+612))。我尝试过 unstack() 和 to_df() 但不确定接下来的步骤。

最佳答案

我在我这边创建了一个数据框,但排除了您分配的 .head(3):

countrypat = asiaselect.groupby('Country')['Pattern'].value_counts().groupby(level=0)

以下内容将为您提供简单应用于您的 groupby 对象的比例:

countrypat.apply(lambda x: x / float(x.sum()))

唯一的“问题”是这样做会返回一个系列,因此我会将中间结果存储在两个不同的系列中,并在最后将它们组合起来:

series1 = asiaselect.groupby('Country')['Pattern'].value_counts()
series2 = asiaselect.groupby('Country')['Pattern'].value_counts().groupby(level=0).apply(lambda x: x / float(x.sum()))
pd.DataFrame([series1, series2]).T

China abc 1055.0 0.431493
def 778.0 0.318200
ghi 612.0 0.250307
Malaysia def 554.0 0.472293
abc 441.0 0.375959
ghi 178.0 0.151748

要获取前三行,您只需为每个Series1和series2添加一个.groupby(level=0).head(3)即可

series1_top = series1.groupby(level=0).head(3)
series2_top = series2.groupby(level=0).head(3)
pd.DataFrame([series1_top, series2_top]).T

我使用包含超过 3 行的数据框进行了测试,它似乎有效。从以下 df 开始:

China     abc        1055
def 778
ghi 612
yyy 5
xxx 3
zzz 3
Malaysia def 554
abc 441
ghi 178
yyy 5
xxx 3
zzz 3

结束如下:

China    abc       1055.0  0.429560
def 778.0 0.316775
ghi 612.0 0.249186
Malaysia def 554.0 0.467905
abc 441.0 0.372466
ghi 178.0 0.150338

关于python - 将比率字段插入 Pandas 系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43641500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com