这是我的原始数据框:
>>> 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
我经历了很多帖子,无法得到理想的答案。任何帮助将不胜感激。
答案 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
如果列为a
和b
:
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