带join的groupby agg无法产生预期的输出

时间:2018-10-24 17:58:09

标签: python pandas

我的数据框如下

   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

输出与预期输出不匹配。在{{1}和agg中,join的{​​{1}}上是否存在特定问题

由于groupby之类的其他axis=1功能正常运行

agg

关于为什么结果变为浮动而不是str检查link

感谢您的帮助:-)

1 个答案:

答案 0 :(得分:3)

这里是一个提示:

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在每种情况下的动作都不同。