大熊猫移动聚合字符串

时间:2016-03-09 21:37:32

标签: string pandas concatenation

from pandas import *

import StringIO

df = read_csv(StringIO.StringIO('''id   months  state
1   1   C
1   2   3
1   3   6
1   4   9
2   1   C
2   2   C
2   3   3
2   4   6
2   5   9
2   6   9
2   7   9
2   8   C
'''), delimiter= '\t')

我想创建一个列,显示列状态的累积状态,按id。

id  months  state   result
1   1   C   C
1   2   3   C3
1   3   6   C36
1   4   9   C369
2   1   C   C
2   2   C   CC
2   3   3   CC3
2   4   6   CC36
2   5   9   CC69
2   6   9   CC699
2   7   9   CC6999
2   8   C   CC6999C

基本上是字符串列的连接。最好的方法是什么?

1 个答案:

答案 0 :(得分:3)

只要dtypestr,您就可以执行以下操作:

In [17]:
df['result']=df.groupby('id')['state'].apply(lambda x: x.cumsum())
df

Out[17]:
    id  months state    result
0    1       1     C         C
1    1       2     3        C3
2    1       3     6       C36
3    1       4     9      C369
4    2       1     C         C
5    2       2     C        CC
6    2       3     3       CC3
7    2       4     6      CC36
8    2       5     9     CC369
9    2       6     9    CC3699
10   2       7     9   CC36999
11   2       8     C  CC36999C

基本上我们在{id'列上groupby,然后apply使用transform的lambda返回cumsum。这将执行字符串值的累积连接并返回Series,其索引与原始df对齐,因此您可以将其添加为列