python - 将 Pandas Dataframe 转换为特定格式

标签 python pandas dataframe pandas-groupby aggregate

我有以下数据框:

d = pd.DataFrame({'UNIQUE_KEY': [1, 2, 3, 4], 'TRANSFORMATION': ['P', 'D', 'N', 'P'], 
     'DIM_1': ['Y', 'N', 'N', 'Y'], 'DIM_2': ['N', 'N', 'N', 'Y'], 'DIM_3': ['Y', 'Y', 'N', 'Y']})


    UNIQUE_KEY  TRANSFORMATION  DIM_1   DIM_2   DIM_3
0   1           P               Y       N       Y
1   2           D               N       N       Y
2   3           N               N       N       N
3   4           P               Y       Y       Y

我想执行几个groupby并聚合操作以获得以下输出数据帧:

    DIM      DIM_VALUE   TTL_CASES   % CASES   % D    % N    % P 
0   DIM_1    'Y'         2           50        0      0      100
1   DIM_1    'N'         2           50        50     50     0
2   DIM_2    'Y'         1           25        0      0      100
3   DIM_2    'N'         3           75        33.3   33.3   33.3
4   DIM_3    'Y'         3           75        33.3   0      66.6
5   DIM_3    'N'         1           25        0      100    0

哪里

  • DIM是一列,每个 DIM_1,2,3
  • DIM_VALUE是基于每个 DIM_1,2,3 的值的分组列
  • TTL_CASES是计数为 UNIQUE_KEY 的列分组依据 DIMDIM_1,2,3
  • PCT_CASESTTL_CASES 每行的百分比
  • %D , %P , %NTRANSFORMATION 的百分比的UNIQUE_KEY基于 DIM 分组和DIM_1,2,3

我所拥有的是以下内容:

P = d.groupby('TRANSFORMATION')['UNIQUE_KEY'].count().reset_index()
P['Percentage'] = 100 * P['UNIQUE_KEY']  / P['UNIQUE_KEY'].sum()

这给出了 TRANFORMATION 中每个值的百分比但是我如何对每个维度执行此操作并获得我想要的格式的输出数据帧?

提前致谢!

最佳答案

似乎没有简单的方法来实现所需的输出,您需要将问题分解为多个步骤:首先熔化数据帧,将 DIM 之类的列转换为行,然后创建两个石斑鱼对象,使用根据需要石斑鱼对象并将结果分配给输出数据帧

s = d.melt(['UNIQUE_KEY', 'TRANSFORMATION'], var_name='DIM', value_name='DIM_VALUE')

g1 = s.groupby(['DIM'])
g2 = s.groupby(['DIM', 'DIM_VALUE'])

out = pd.DataFrame()
out['TTL_CASES'] = g2['UNIQUE_KEY'].count()
out['%_TTL_CASES'] = out['TTL_CASES'].div(g1['UNIQUE_KEY'].count()).mul(100)
out = out.assign(**g2['TRANSFORMATION'].value_counts(normalize=True).mul(100).unstack(fill_value=0).add_prefix('%'))

结果

     DIM DIM_VALUE  TTL_CASES  %_TTL_CASES         %D          %N          %P
0  DIM_1         N          2         50.0  50.000000   50.000000    0.000000
1  DIM_1         Y          2         50.0   0.000000    0.000000  100.000000
2  DIM_2         N          3         75.0  33.333333   33.333333   33.333333
3  DIM_2         Y          1         25.0   0.000000    0.000000  100.000000
4  DIM_3         N          1         25.0   0.000000  100.000000    0.000000
5  DIM_3         Y          3         75.0  33.333333    0.000000   66.666667

关于python - 将 Pandas Dataframe 转换为特定格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71113352/

相关文章:

python - 如何在Redis中保存复杂的数据结构?

python - 当数据方差较低时,在 pandas 中获取四分位数

r - 将函数应用于列表中所有数据框的某些列,然后为列赋值

r - 使用逻辑从现有多列数据帧生成新的多列数据帧

python - Pygame/Tkinter 音乐播放器 : Time slider causes choppy audio

python - Django:为什么出现 KeyError: 'pk'

python : How to interpret the result of logistic regression by sm. 登录

python - 在两组之后将系列转换为数据框

python - Pandas 将文本文件读入数据框

python - 根据行号删除数据帧的行