groupby在包含tex的列中使用时返回多级数据帧

2024-09-30 04:34:18 发布

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

我试图对一些信号进行分组,同时连接文本,因为我使用了类似于下面代码的东西。在这里,我使用sum\u x custom函数连接“text”下的文本

lst = [{'name': 'A', 'reg': '1', 'text': 'txt1', 'value': 5},
{'name': 'A', 'reg': '1', 'text': 'txt2', 'value': 2},
{'name': 'B', 'reg': '2', 'text': 'txt3', 'value': 2}]
data = pd.DataFrame(lst) 
sum_x = lambda x : x.sum()
data.groupby(by=['name', 'reg']).apply(sum_x)

Out[48]: 
        name reg      text  value
name reg                          
A    1     AA  11  txt1txt2      7
B    2      B   2      txt3      2

然而,这并不能产生预期的结果 注意文本列是如何按预期添加的,还有“by”列是如何连接的。反应也有一个额外的层次。 是否有可能获得如下结果:

name reg      text  value       
 A   1     txt1txt2      7
 B   2         txt3      2

“by”中的列保存在哪里?你知道吗


Tags: 函数代码textname文本databy信号
2条回答

您可以选择执行groupby操作的列:

 In [21]: data.groupby(by=['name', 'reg'])[['text', 'value']].apply(sum_x)
Out[21]:
              text  value
name reg
A    1    txt1txt2      7
B    2        txt3      2

最后,如果不希望索引中的namereg,可以使用reset_index()

In [22]: data.groupby(by=['name', 'reg'])[['text', 'value']].apply(sum_x).reset_index()
Out[22]:
  name reg      text  value
0    A   1  txt1txt2      7
1    B   2      txt3      2

试试这个:

In [21]: data.groupby(['name', 'reg']).agg({'value':'sum', 'text':'sum'}).reset_index()
Out[21]:
  name reg      text  value
0    A   1  txt1txt2      7
1    B   2      txt3      2

相关问题 更多 >

    热门问题