groupby и среднее значение подмножеств столбцов в кадре данных Python - PullRequest
0 голосов
/ 09 сентября 2018

Если у меня есть эти 2 столбца:

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"])

Я хочу получить фрейм данных, который использует groupby по «Time» и «animal». Затем он использует средства комбинации других столбцов. Одним из подмножеств является ["val", "val3"] и ["val2", "val4"].

По сути, что-то, что использует средства результата df_dat.groupby (["Time", "animal"]). Mean () для подмножеств столбца значения

Вывод, который я ищу, выглядит (но в формате датафрейма):

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

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Настройка

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
0 голосов
/ 09 сентября 2018

Я считаю, что вам нужно

ndf = df_dat.groupby(['Time', 'animal']).mean()
ndf['v1v3'], ndf['v2v4'] = ndf[['val', 'val3']].mean(1), ndf[['val2', 'val4']].mean(1)

Выходы

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

Можно, конечно, просто выбрать средние столбцы

ndf[['v1v3', 'v2v4']]

                v1v3    v2v4
Time    animal      
yes     cat     15.0    10.0
        dog     40.0    177.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...