Pandas:groupby索引然后使用函数填充数据帧

时间:2016-11-17 05:53:50

标签: python pandas dataframe

我有一个像这样的数据框:

df = pd.DataFrame({'pop1': ['1000', '2000','3000','4000'],
                   'pop2': ['2000', '3000','2000','2000']},
                  index=['female','female','male','male'])

如何创建一个2 * 2数据框,它给出给定年份(两列)的给定年份(2列)中总人口的百分比?

3 个答案:

答案 0 :(得分:4)

您需要先stringint投射到sum,然后astype投放100groupby除以{{3} }}。最后一个df = df.astype(int) a = df.groupby(level=0).sum() print (a) pop1 pop2 female 3000 5000 male 7000 4000 b = df.sum() print (b) pop1 10000 pop2 9000 dtype: int64 print (a.div(b).mul(100)) pop1 pop2 female 30.0 55.555556 male 70.0 44.444444

df = df.astype(int)
print (df.groupby(level=0).sum().div(df.sum()).mul(100))
        pop1       pop2
female  30.0  55.555556
male    70.0  44.444444

与:

相同
var obj = [{
  "1": "one"
}, {
  "2": "two"
}]
obj.forEach(function(item) {
  Object.keys(item).forEach(function(key) {
    console.log("key:" + key + "value:" + item[key]);
  });
});

答案 1 :(得分:3)

这是一个班轮:

end of file

如果你已经在处理整数,那就更漂亮了:

(df.astype(int) / df.astype(int).sum()).groupby(level=0).sum() * 100

汇总,在将数据转换为整数后,然后将每个数字除以相关总体的总大小,将每个性别的权重相加,然后乘以100,使结果看起来像一个百分比。

答案 2 :(得分:3)

v = df.values.astype(int)
pd.DataFrame(
    v / v.sum(0) * 100, df.index, df.columns
).groupby(level=0).sum()

enter image description here