如何在Pandas中向int/float数据帧追加字符串

2024-09-30 08:24:49 发布

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

这是我的原始数据帧:

  >>> 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

我用以下公式计算大熊猫的c6和c0:

^{pr2}$

输出:

       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

我看了很多帖子,都没有得到想要的答案。任何帮助都将不胜感激。


Tags: key2key1key3c0key0dvpc6bsy
2条回答

您可以在reset_index之前分组后applylambda

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

或者可以使用groupbyas_index参数,然后检查列名称c6

^{pr2}$

您可以使用^{}选择第二列,并通过^{}int列转换为{}:

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

或者:

^{pr2}$

如果列是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

相关问题 更多 >

    热门问题