Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于列的堆栈数据_Python_Pandas_Pandas Groupby - Fatal编程技术网

Python 基于列的堆栈数据

Python 基于列的堆栈数据,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我在python中,我有一个这样的数据框,包含sub_id指的是患者id,hour_度量值从1到22,以及其他患者的度量值 subject_id | hour_measure heart rate | urinecolor | blood pressure -------------------------------------------------------- 3 | 1

我在python中,我有一个这样的数据框,包含sub_id指的是患者id,hour_度量值从1到22,以及其他患者的度量值

  subject_id  |   hour_measure     heart rate     |  urinecolor |  blood pressure  
     --------------------------------------------------------                
        3        |  1                   40        |  red        |  high
        3        |  2                   60        |  red        |  high
        3        |  ..                  ..        |  ..         |  ..
        3        |  22                  90        |  red        |  high

        4        |  3                   60        |  yellow     |  low
        4        |  3                   60        |  yellow     |  low  
        4        |  22                  90        |  red        |  high
我想根据最大最小偏差等对数字特征和分类的第一个和最后一个值的子_id测量进行分组

我写下面的代码

df= pd.read_csv(path)
df1 = (df.groupby(['subject_id','hour_measure'])
        .agg([ 'sum','min','max', 'median','var','skew']))
f = lambda x: next(iter(x.mode()), None)
cols = df.select_dtypes(object).columns
df2 = df.groupby(['subject_id','hour_measure'])[cols].agg(f)
df2.columns = pd.MultiIndex.from_product([df2.columns, ['mode']])
print (df2) 
df3 = pd.concat([df1, df2], axis=1).unstack().reorder_levels([0,2,1],axis= 1)
print (df3)          
df3.to_csv("newfile.csv")
它给了我每小时的分组

我试着只使用主题id将其分组

df1 = (df.groupby(['subject_id'])
        .agg([ 'sum','min','max', 'median','var','skew']))
它也给我相同的输出,并计算每小时的统计数据,如下所示

     subject_id  |     heart rate_1     |  heartrate_2 .... 
     --------------------------------------------------------                
                |  min    max     mean  | min   max   mean ....               
        3
        4
我希望输出如下所示

     subject_id  |     heart rate        |  repiratotry rate  |urine color
     --------------------------------------------------------                
                 |  min  |  max   | mean  | min |  max |  mean ..|. first |  last 
        3            50     60      55     40     65      20     | yellow |  red
任何人都可以告诉我如何编辑代码以提供所需的输出
任何帮助都将不胜感激

如果这能让你接近你想要的东西,请告诉我。我没有遇到你每小时分组的问题,所以我不确定我是否完全理解你的问题

#示例数据帧
df=pd.DataFrame(
{
“受试者id”:[1,1,1,2,2,3,3,3],
“小时度量”:[1,22,12,5,18,21,8,18,4],
“血压”:[
“高”,
“高”,
“高”,
“高”,
“低”,
“低”,
“低”,
“低”,
“高”,
],
}
)
#在聚合数值列之前对其进行排序
数值结果=(
df.选择类型(include=“number”)
.groupby([“主题id”])
.agg([“最小”、“最大”、“平均值”])
)
#在聚合分类列之前对其进行排序
分类结果=(
df.set_索引([“主题id”])
.选择类型(include=“object”)
.groupby([“主题id”])
.agg([“第一个”、“最后一个”])
)
#结合数字和分类结果
结果=数值结果。联接(分类结果)

对不管数据量多大,它都能在短时间内满足我的需求,谢谢。。
                 hour_measure                blood_pressure
                    min max       mean          first  last
subject_id
1                     1  22  11.666667           high  high
2                     5  21  14.666667           high   low
3                     4  18  10.000000            low  high