如果我有以下两列:

dat=[['yes','dog', 20,4,60,400],['yes','dog', 20,4,60,300],['yes','cat', 20,10,10,float('nan')]]
df_dat= pd.DataFrame(dat,columns = ["Time","animal", "val", "val2", "val3", "val4"])


我想获得一个使用“时间”和“动物”分组的数据框。然后,它采用其他列的组合方式。一个子集是[“ val”,“ val3”]和[“ val2”,“ val4”]。

基本上,某些东西利用df_dat.groupby([“ Time”,“ animal”])。mean()的结果作为值列子集

我正在寻找的输出看起来像(但采用数据帧格式):

[Index , 'val'/'val3','val2/val4']
[('yes','dog'),40,177]
[('yes','cat'),15,10]

最佳答案

设定

df = df_dat.groupby(['Time', 'animal']).mean()
subsets = [["val","val3"], ["val2","val4"]]


使用字典理解和assign

df.assign(**{'/'.join(cols): df[cols].mean(1) for cols in subsets})




             val  val2  val3   val4  val/val3  val2/val4
Time animal
yes  cat      20    10    10    NaN      15.0       10.0
     dog      20     4    60  350.0      40.0      177.0


如果只希望子集列:

pd.DataFrame({'/'.join(cols): df[cols].mean(1) for cols in subsets})




             val/val3  val2/val4
Time animal
yes  cat         15.0       10.0
     dog         40.0      177.0

10-06 07:07
查看更多