【问题标题】:Elegant and efficient way to find the median value based on different columns基于不同列查找中值的优雅高效方法
【发布时间】:2021-04-01 15:09:15
【问题描述】:

我有一个如下所示的数据框,但我的真实数据框有数百万行

te_df = pd.DataFrame({'subject_id':[1,1,1,2,2,2,3,3],
                      'test':['test1','test2','test3','test1','test2','test3','test1','test4'],
              '0-24hrs':[1,1,1,2,1,1,np.nan,np.nan],
              '24-48hrs':[np.nan,np.nan,np.nan,1,1,1,2,1],
              '48-72hrs':[2,3,1,3,3,np.nan,np.nan,np.nan]
                    })

我想找出每 24 小时(使用 0-24hrs24-48hrs48-72hrs)进行测试的次数(识别 using test column

我尝试了以下

df_out = pd.DataFrame()
df_out['1st_24'] = te_df.groupby('test')['0-24hrs'].median()
df_out['2nd_24'] = te_df.groupby('test')['24-48hrs'].median()
df_out['3rd_24'] = te_df.groupby('test')['48-72hrs'].median()

除了重复三次相同的行之外,还有其他有效且优雅的方法来找到它吗?因为我的真实数据框有数百万行

【问题讨论】:

  • te_df.groupby('test').median() 有什么问题?

标签: python pandas dataframe pandas-groupby series


【解决方案1】:

为什么不试试

out = df.groupby('test')[['0-24hrs', '24-48hrs', '48-72hrs']].median()
       0-24hrs  24-48hrs  48-72hrs
test                              
test1      1.5       1.5       2.5
test2      1.0       1.0       3.0
test3      1.0       1.0       1.0
test4      NaN       1.0       NaN

【讨论】:

  • FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead. :-)
  • @QuangHoang 啊搞定你了~
【解决方案2】:

您也可以这样做:-

df_out=te_df.groupby('test').median().drop(columns=['subject_id'])

#output

       0-24hrs  24-48hrs    48-72hrs
test            
test1   1.5     1.5         2.5
test2   1.0     1.0         3.0
test3   1.0     1.0         1.0
test4   NaN     1.0         NaN

注意:在@BENY 的方法中,通过传递列表来访问列值,您不会收到警告:

out = df.groupby('test')[['0-24hrs', '24-48hrs', '48-72hrs']].median()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 2011-06-11
    • 2019-12-19
    • 2018-02-24
    • 1970-01-01
    相关资源
    最近更新 更多