如何将字符串附加到Pandas中的int / float数据帧

时间:2016-02-26 06:45:52

标签: python python-3.x pandas

这是我的原始数据框:

  >>> df
           c0      c1      c2        c3   c4   c5   c6  c7     c8
    0  key0:j  key1:z  key2:b  key3:bsy  afj  upz  343  13  ruhwd
    1  key0:u  key1:i  key2:a  key3:dvp  ibt  dxv  154   0  adsif
    2  key0:t  key1:a  key2:a  key3:jqj  dtd  yxq  540  49  kxthz
    3  key0:j  key1:z  key2:b  key3:bsy  afj  upz  322  13  ruhwd
    4  key0:j  key1:z  key2:b  key3:bsy  afj  upz  397  13  ruhwd
    5  key0:u  key1:i  key2:a  key3:dvp  ibt  dxv  110   0  adsif
    6  key0:t  key1:a  key2:a  key3:jqj  dtd  yxq  526  49  kxthz
    7  key0:t  key1:u  key2:g  key3:nfk  ekh  trc   85  83  xppnl

我正在使用这个计算pandas中c0的c6之和:

df.groupby(['c0'])['c6'].sum().reset_index()

输出:

       c0     0
0  key0:j  1062
1  key0:t  1151
2  key0:u   264

在这里,我希望以这种方式输出groupby,带有sum的列也应该附加一个字符串'abc'。如下所示:

    c0        0
0  key0:j     abc1062
1  key0:t     abc1151
2  key0:u     abc264

我经历了很多帖子,无法得到理想的答案。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

apply之前分组后,您可以lambda reset_index

In [19]: df.groupby(['c0'])['c6'].sum().apply(lambda x: 'abc' + x.astype(str)).reset_index()
Out[19]:
       c0       c6
0  key0:j  abc1062
1  key0:t  abc1151
2  key0:u   abc264

或者您可以使用groupby as_index参数,然后检查您的列号c6

In [29]: df.groupby(['c0'], as_index=False)['c6'].sum().apply(lambda x: 'abc' + x.astype(str) if x.name=='c6' else x)
Out[29]:
       c0       c6
0  key0:j  abc1062
1  key0:t  abc1151
2  key0:u   abc264

答案 1 :(得分:0)

您可以使用ix选择第二列,并将int列转换为string astype

print df
       c0     0
0  key0:j  1062
1  key0:t  1151
2  key0:u   264

df.ix[:,1] = '"abc"' + df.ix[:,1].astype(str)
print df
       c0          0
0  key0:j  "abc"1062
1  key0:t  "abc"1151
2  key0:u   "abc"264

或者:

df.ix[:,1] = 'abc' + df.ix[:,1].astype(str)
print df
       c0        0
0  key0:j  abc1062
1  key0:t  abc1151
2  key0:u   abc264

如果列为ab

print df
        a     b
0  key0:j  1062
1  key0:t  1151
2  key0:u   264

df['b'] = 'abc' + df['b'].astype(str)
print df
        a        b
0  key0:j  abc1062
1  key0:t  abc1151
2  key0:u   abc264

编辑:

你可以尝试,但我认为它比上面的解决方案更慢:

df = df.groupby(['c0'])['c6'].apply(lambda x: 'abc' + str( x.sum())).reset_index()
print df
       c0       c6
0  key0:j  abc1062
1  key0:t  abc1151
2  key0:u   abc264