基于不同列查找中值的优雅而有效的方法
Elegant and efficient way to find the median value based on different columns
我有一个如下所示的数据框,但我的真实数据框有数百万行
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 小时进行测试(识别 using test column
)的 median
次(使用 0-24hrs
、24-48hrs
、48-72hrs
)
我尝试了以下
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()
除了将同一行重复三次之外,还有其他有效且优雅的方法可以找到它吗?因为我的真实数据框有百万行
为什么不试试
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
您也可以通过以下方式进行:-
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()
我有一个如下所示的数据框,但我的真实数据框有数百万行
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 小时进行测试(识别 using test column
)的 median
次(使用 0-24hrs
、24-48hrs
、48-72hrs
)
我尝试了以下
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()
除了将同一行重复三次之外,还有其他有效且优雅的方法可以找到它吗?因为我的真实数据框有百万行
为什么不试试
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
您也可以通过以下方式进行:-
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()