在pandas datafram中使用函数和groupby联合字符串时出现数据错误

2024-10-17 16:25:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下结构的数据帧:

多年基金:

    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列和地址。我发现了一个非常有用的链接:

Pandas groupby: How to get a union of strings

基于此,我开发了以下功能:

^{pr2}$

使用

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

这将返回错误:

TypeError: must be str, not int

看看我的数据,我不知道问题出在哪里,我相信对'Entry'的整数运行.sum()。在

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


Tags: 数据pandasdf基金链接address地址错误
1条回答
网友
1楼 · 发布于 2024-10-17 16:25:36

我想有些列是数字的,需要string。在

所以使用^{},如果需要,可以删除NaNs add^{}

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的解决方案,但必须重命名列:

^{pr2}$

相关问题 更多 >