Groupby agg с join не дает ожидаемого результата - PullRequest
0 голосов
/ 24 октября 2018

У меня есть датафрейм, как показано ниже

   Wash_Month  Wash_Day
0           3         2
1           4         3

И ожидаемый выходной результат равен

#d={'Wash_Month':'Wash_Month/Wash_Day','Wash_Day':'Wash_Month/Wash_Day'}

#df.T.astype(str).groupby(d).agg(','.join)
Out[329]: 
                       0    1
Wash_Month/Wash_Day  3,2  4,3

Как вы видели, я сначала делаю транспонирование T.

Если мы groupby с axis=1 и удалим T, я ожидал того же выхода.

df.astype(str).groupby(d,axis=1).agg(','.join)
Out[330]: 
   Wash_Month/Wash_Day
0  Wash_Month,Wash_Day
1  Wash_Month,Wash_Day

Выход не соответствует ожидаемому результату.Есть ли конкретная проблема на agg с join с groupby из axis=1

Поскольку другие agg функции, такие как sum, работают как обычно

df.astype(str).groupby({'Wash_Month':'Wash_Month/Wash_Day','Wash_Day':'Wash_Month/Wash_Day'}, axis=1).sum()
Out[332]: 
   Wash_Month/Wash_Day
0                 32.0 # str 3 + str 2
1                 43.0

О причинахрезультат стал float, а не str check link

Благодарим вас за помощь: -)

1 Ответ

0 голосов
/ 24 октября 2018

Вот подсказка:

def f(x):
    print(x)
    print(type(x))
    return 1

df.astype(str).groupby(d,axis=1).agg(f)

Вывод:

  Wash_Month Wash_Day
0          3        2
1          4        3
<class 'pandas.core.frame.DataFrame'>

Обратите внимание, что вывод представляет собой фрейм данных.

В отличие от:

def f(x):
    print(x)
    print(type(x))
    return 1

df.T.astype(str).groupby(d).agg(f)

Вывод:

Wash_Month    3
Wash_Day      2
Name: 0, dtype: object
<class 'pandas.core.series.Series'>
Wash_Month    4
Wash_Day      3
Name: 1, dtype: object
<class 'pandas.core.series.Series'>

Какой f вызывается с каждой серией, следовательно, 'join' объединяет заголовки столбцов.

Я не могу объяснить это копанием в источникекод, но кажется, что groupby вместе с astype (str) заставляет agg действовать по-разному в каждой ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...