为了账号安全,请及时绑定邮箱和手机立即绑定

具有独立索引的动态数据透视表

具有独立索引的动态数据透视表

慕森卡 2023-03-22 16:32:00
我有一个包含基本 sociodem 变量和许多其他协变量的数据框。对于 sociodem 变量,我想创建一个数据透视表,以便两列按 聚合Test Result。我想要一些按计数分类的变量,一些按中位数分类。例如,我想捕获的中位数,WBC但我想要的计数是Race。我不确定如何构建我的数据透视表或 groupby 表,因为我知道列需要是Test Result并且索引需要是其他协变量,但我不能将多个索引作为不同的变量。Example DataframeID    Race    WBC_Count  Cough  (0/1)  Test Result....1     black     23.6       0                Positive 2     white     13.5       1                Negative3     hispanic  20.3       0                Positive               Positive Negative Black             23        54White             23        56Asian             34        18...WBC(median)      13.5       10.9Cough(count)     23          13
查看完整描述

1 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

  • pandas.DataFrame.groupby在所需的列上使用。

  • pandas.DataFrame.agg对不同的列使用不同的函数

  • 我知道该列需要是测试结果,索引需要是其他协变量,但我不能将多个索引作为不同的变量。

    • pandas.DataFrame.reset_index在特定级别删除多索引。

  • 问题中提供的示例数据不容易像发布的那样重现,因此已为此答案提供了可重现的数据集。

import pandas as pd

import numpy as np

import random


# sample data

np.random.seed(365)

random.seed(365)

data = {'a': [np.random.randint(10) for _ in range(25)],

        'groups': [random.choice(['1-5', '6-25', '26-100', '100-500', '500-1000', '>1000']) for _ in range(25)],

        'treatment': [random.choice(['Yes', 'No']) for _ in range(25)],

        'date': pd.bdate_range(datetime.today(), freq='d', periods=25).tolist()}

df = pd.DataFrame(data)


# display(df.head())

 a  groups treatment       date

 2   >1000       Yes 2020-07-20

 4  26-100       Yes 2020-07-21

 1   >1000       Yes 2020-07-22

 5    6-25        No 2020-07-23

 2  26-100       Yes 2020-07-24


# groupby and aggregate different features of different columns

df.groupby(['groups', 'treatment']).agg({'a': 'mean', 'groups': 'count'}).reset_index(level='treatment')


         treatment         a  groups

groups                              

1-5             No  5.000000       3

1-5            Yes  7.000000       1

100-500         No  5.500000       2

100-500        Yes  3.000000       2

26-100          No  9.000000       1

26-100         Yes  2.666667       3

500-1000        No  2.666667       3

500-1000       Yes  7.500000       2

6-25            No  5.500000       2

6-25           Yes  5.333333       3

>1000          Yes  2.000000       3


查看完整回答
反对 回复 2023-03-22
  • 1 回答
  • 0 关注
  • 69 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信