我正在尝试对一些信号进行分组并同时连接文本,因为我使用了与下面代码类似的东西。我使用sum_x自定义函数连接文本'
下的文本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'被保留了吗?
答案 0 :(得分: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
最后,如果您不希望索引中包含name
和reg
,则可以使用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
答案 1 :(得分: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