Python 如何将字符串附加到Pandas中的int/float数据帧
这是我的原始数据帧:Python 如何将字符串附加到Pandas中的int/float数据帧,python,python-3.x,pandas,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
>>> 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之和:
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
我浏览了很多帖子,没有得到想要的答案。任何帮助都将不胜感激。您可以使用以下方法选择第二列并将int
列转换为string
:
或:
如果列为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
在
重置索引之前分组后,您可以应用lambda
:
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作为_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
你是说预编曲,对吗?你需要的是“abc”1062
还是abc1062
?@Anton protopov我需要的是abc1062@pp_:是的,我是说prepend@MayankPorwal您能在分组前附加原始数据帧吗?Hi@jezrael数值为10621151264的列基本上是groupby命令的输出。所以,我想要的是,在groupby计算结果时,它还应该在总和中附加字符串abc。
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
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