将比率字段插入Pandas系列

时间:2017-04-26 18:05:39

标签: python pandas series

我得到了一个熊猫系列:

 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(),但不确定接下来的步骤。

1 个答案:

答案 0 :(得分:1)

我在我这边创建了一个数据框,但排除了你的.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

要获得前三行,您只需向每个系列1和系列2添加.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