数据错误在大熊猫数据框中使用功能和GROUPBY工会串

问题描述:

,我有以下结构的数据帧:数据错误在大熊猫数据框中使用功能和GROUPBY工会串

是myDF:

Entry Address   ShortOrdDesc 
0 988  Fake Address 1 SC_M_W_3_1 
1 989  Fake Address 2 SC_M_W_3_3 
2 992  Fake Address 3 nan_2 
3 992      SC_M_G_1_1 
4 992      SC_M_O_1_1 

有要在此完成的工作df,可以以行有机结合起来相同的条目。对于这些只有第一行有地址。我需要连接ShortOrdDesc列和地址。我发现这是一个非常有用的链接:这是使用

myobj = ordersToprint.groupby('Entry').apply(f) 

这将返回错误应用

def f(x): 
    return pd.Series(dict(A = x['Entry'].sum(), 
         B = x['Address'].sum(), 
         C = "%s" % '; '.join(x['ShortOrdDesc']))) 

Pandas groupby: How to get a union of strings

从这个工作我已经开发了以下功能:

TypeError: must be str, not int

看看我的数据,我没有看到问题是什么,因为对'Entry'的整数运行.sum()应该工作,我相信。

我的代码或我的方法有什么错误?

我觉得有些栏是数字,需要string

因此,使用astype,如果需要删除NaN的add dropna

def f(x): 
return pd.Series(dict(A = x['Entry'].sum(), 
        B = ''.join(x['Address'].dropna().astype(str)), 
        C = '; '.join(x['ShortOrdDesc'].astype(str)))) 

myobj = ordersToprint.groupby('Entry').apply(f) 
print (myobj) 
      A    B        C 
Entry              
988  988 Fake Address 1      SC_M_W_3_1 
989  989 Fake Address 2      SC_M_W_3_3 
992 2976 Fake Address 3 nan_2; SC_M_G_1_1; SC_M_O_1_1 

另一种解决方案与agg,但随后有必要重新命名列:

f = {'Entry':'sum', 
     'Address' : lambda x: ''.join(x.dropna().astype(str)), 
     'ShortOrdDesc' : lambda x: '; '.join(x.astype(str))} 
cols = {'Entry':'A','Address':'B','ShortOrdDesc':'C'} 
myobj = ordersToprint.groupby('Entry').agg(f).rename(columns=cols)[['A','B','C']] 
print (myobj) 
      A    B        C 
Entry              
988  988 Fake Address 1      SC_M_W_3_1 
989  989 Fake Address 2      SC_M_W_3_3 
992 2976 Fake Address 3 nan_2; SC_M_G_1_1; SC_M_O_1_1