熊猫将多索引与另一列相乘

命运的选择

假设我有一个看起来像这样分组的框架。

                                                  q_n   q_N       q_f
level_id year   level_name       question value                      
0        2020   Level_1          q1_1     1.0     0.0  82.0  0.000000
                                          2.0     0.0  82.0  0.000000
                                          3.0     3.0  82.0  0.036585
                                          4.0    33.0  82.0  0.402439
                                          5.0    46.0  82.0  0.560976
                                 q1_2     1.0     1.0  82.0  0.012195
                                          2.0     4.0  82.0  0.048780
                                          3.0    11.0  82.0  0.134146
                                          4.0    34.0  82.0  0.414634
                                          5.0    32.0  82.0  0.390244

我想为每个组计算一个平均值,所以每个组内value时间q_n和它们的总和除以q_N(组内的每一行都应该得到相同的平均值)。

我尝试做这样的事情:

df['q_m'] = ((df['q_n']*df.index.get_level_values('value')) / (df['q_n'].groupby(['year', 'level_name', 'question']).transform('sum')))

但是该部门的上限没有得到适当的总结。如何能够做到一列q_m,对于q1_1有每行4.52每一行和4.12 q1_2

用于检测:

df.reset_index().to_records()

rec.array([(0, 0, 2020., 'level_1', 'q1_1', 1.,  0., 82., 0.        , 0.        ),
           (1, 0, 2020., 'level_1', 'q1_1', 2.,  0., 82., 0.        , 0.        ),
           (2, 0, 2020., 'level_1', 'q1_1', 3.,  3., 82., 0.03658537, 0.1097561 ),
           (3, 0, 2020., 'level_1', 'q1_1', 4., 33., 82., 0.40243902, 1.6097561 ),
           (4, 0, 2020., 'level_1', 'q1_1', 5., 46., 82., 0.56097561, 2.80487805),
           (5, 0, 2020., 'level_1', 'q1_2', 1.,  1., 82., 0.01219512, 0.01219512),
           (6, 0, 2020., 'level_1', 'q1_2', 2.,  4., 82., 0.04878049, 0.09756098),
           (7, 0, 2020., 'level_1', 'q1_2', 3., 11., 82., 0.13414634, 0.40243902),
           (8, 0, 2020., 'level_1', 'q1_2', 4., 34., 82., 0.41463415, 1.65853659),
           (9, 0, 2020., 'level_1', 'q1_2', 5., 32., 82., 0.3902439 , 1.95121951)],
          dtype=[('index', '<i8'), ('level_id', '<i8'), ('year', '<f8'), ('level_name', 'O'), ('question', 'O'), ('value', '<f8'), ('q_n', '<f8'), ('q_N', '<f8'), ('q_f', '<f8'), ('q_m', '<f8')])

df.to_dict()

{'q_n': {(0, 2020.0, 'Level_1', 'q1_1', 1.0): 0.0,
  (0, 2020.0, 'Level_1', 'q1_1', 2.0): 0.0,
  (0, 2020.0, 'Level_1', 'q1_1', 3.0): 3.0,
  (0, 2020.0, 'Level_1', 'q1_1', 4.0): 33.0,
  (0, 2020.0, 'Level_1', 'q1_1', 5.0): 46.0,
  (0, 2020.0, 'Level_1', 'q1_2', 1.0): 1.0,
  (0, 2020.0, 'Level_1', 'q1_2', 2.0): 4.0,
  (0, 2020.0, 'Level_1', 'q1_2', 3.0): 11.0,
  (0, 2020.0, 'Level_1', 'q1_2', 4.0): 34.0,
  (0, 2020.0, 'Level_1', 'q1_2', 5.0): 32.0},
 'q_N': {(0, 2020.0, 'Level_1', 'q1_1', 1.0): 82.0,
  (0, 2020.0, 'Level_1', 'q1_1', 2.0): 82.0,
  (0, 2020.0, 'Level_1', 'q1_1', 3.0): 82.0,
  (0, 2020.0, 'Level_1', 'q1_1', 4.0): 82.0,
  (0, 2020.0, 'Level_1', 'q1_1', 5.0): 82.0,
  (0, 2020.0, 'Level_1', 'q1_2', 1.0): 82.0,
  (0, 2020.0, 'Level_1', 'q1_2', 2.0): 82.0,
  (0, 2020.0, 'Level_1', 'q1_2', 3.0): 82.0,
  (0, 2020.0, 'Level_1', 'q1_2', 4.0): 82.0,
  (0, 2020.0, 'Level_1', 'q1_2', 5.0): 82.0},
 'q_f': {(0, 2020.0, 'Level_1', 'q1_1', 1.0): 0.0,
  (0, 2020.0, 'Level_1', 'q1_1', 2.0): 0.0,
  (0, 2020.0, 'Level_1', 'q1_1', 3.0): 0.036585365853658534,
  (0, 2020.0, 'Level_1', 'q1_1', 4.0): 0.4024390243902439,
  (0, 2020.0, 'Level_1', 'q1_1', 5.0): 0.5609756097560976,
  (0, 2020.0, 'Level_1', 'q1_2', 1.0): 0.012195121951219513,
  (0, 2020.0, 'Level_1', 'q1_2', 2.0): 0.04878048780487805,
  (0, 2020.0, 'Level_1', 'q1_2', 3.0): 0.13414634146341464,
  (0, 2020.0, 'Level_1', 'q1_2', 4.0): 0.4146341463414634,
  (0, 2020.0, 'Level_1', 'q1_2', 5.0): 0.3902439024390244},
 'q_m': {(0, 2020.0, 'Level_1', 'q1_1', 1.0): 0.0,
  (0, 2020.0, 'Level_1', 'q1_1', 2.0): 0.0,
  (0, 2020.0, 'Level_1', 'q1_1', 3.0): 0.10975609756097561,
  (0, 2020.0, 'Level_1', 'q1_1', 4.0): 1.6097560975609757,
  (0, 2020.0, 'Level_1', 'q1_1', 5.0): 2.8048780487804876,
  (0, 2020.0, 'Level_1', 'q1_2', 1.0): 0.012195121951219513,
  (0, 2020.0, 'Level_1', 'q1_2', 2.0): 0.0975609756097561,
  (0, 2020.0, 'Level_1', 'q1_2', 3.0): 0.4024390243902439,
  (0, 2020.0, 'Level_1', 'q1_2', 4.0): 1.6585365853658536,
  (0, 2020.0, 'Level_1', 'q1_2', 5.0): 1.951219512195122}}
广黄

似乎您转换了错误的系列:

df['q_m'] = ((df['q_n']*df.index.get_level_values('value'))
     .groupby(['year','level_name','question'])
     .transform('sum')
     .div(df['q_N'])
)

输出:

                                            q_n   q_N       q_f       q_m
level_id year   level_name question value                                
0        2020.0 Level_1    q1_1     1.0     0.0  82.0  0.000000  4.524390
                                    2.0     0.0  82.0  0.000000  4.524390
                                    3.0     3.0  82.0  0.036585  4.524390
                                    4.0    33.0  82.0  0.402439  4.524390
                                    5.0    46.0  82.0  0.560976  4.524390
                           q1_2     1.0     1.0  82.0  0.012195  4.121951
                                    2.0     4.0  82.0  0.048780  4.121951
                                    3.0    11.0  82.0  0.134146  4.121951
                                    4.0    34.0  82.0  0.414634  4.121951
                                    5.0    32.0  82.0  0.390244  4.121951

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将多列除以熊猫中的另一列

有没有办法将一列熊猫与另一列相乘并获得产品列表?

熊猫:按多列分组,将一列串联,同时添加另一列

如何将熊猫列与多索引数据框的一部分相乘

熊猫分组链接:将多索引列重命名为一列

如何使用熊猫的字符串索引将一列拆分为多列?

通过根据列值熊猫数据框将一列置于另一列之下,将多列合并为一列

熊猫:如何根据另一列建立索引的列?

将多列合并为一列熊猫

使用熊猫将多列减少为一列

熊猫将列表的一列分为多列

熊猫将多列与一列进行比较

如何将数据帧中的每一列与另一个数据帧熊猫中的一行相乘?

将某些列除以熊猫中的另一列

熊猫:如果存在索引,则将一列的值添加到另一列

将一列中的值相乘

根据另一列将单列变成多列

将数据框列与列表中的因子相乘,该因子是根据另一列选择的

根据在另一列中找到的数字将数据框列中的值相乘

熊猫:将多列汇总为一列,没有最后一列

如何将差异序列结果添加到熊猫数据框中的索引0的另一列?

Pyspark如何将一列与另一列的结果相乘 - 数据框中的计数?

使用另一列(熊猫)的值将一列变成两列

熊猫:将另一个数据框的列与列相乘?

将一列的值基于另一列分成多列

熊猫按一列分组将另一列的值连接为定界列表

熊猫根据条件将一列映射到另一列

熊猫-将值从一列映射到另一列

熊猫-将一列映射到另一列并在行上应用乘法