Groupby agg与join不产生预期的输出。[英] Groupby agg with join not produce the expected output

本文是小编为大家收集整理的关于Groupby agg与join不产生预期的输出。的处理方法,想解了Groupby agg与join不产生预期的输出。的问题怎么解决?Groupby agg与join不产生预期的输出。问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有如下数据框

   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 of axis=1

是否存在特定问题

由于像 sum 这样的其他 agg 函数正常工作

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

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

感谢您的帮助 :-)

推荐答案

这里有一个提示:

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 在每种情况下的行为不同.

本文地址:https://www.itbaoku.cn/post/1728137.html