2015-01-21 94 views
0

如果我有以下的数据帧...按级别合并数据框行值转换为字符串

  code 
player_id  
223336  4 
223336  5 
223336  4 
225987  2 
225987  3 
225987  4 

我如何合并“代码”列到一个字符串,结果会是什么样子......

   code 
player_id  
223336  454 
225987  234 

谢谢!

+0

什么是您的数据源?文本文件或数据库? – 2015-01-21 02:09:08

+0

只是这6个值,还是一个通用的解决方案? IE会一直用三个值块来做这件事吗? – 2015-01-21 02:09:40

+0

这只是DataFrame的一部分......所以是一个通用的解决方案。 – TravisVOX 2015-01-21 02:10:21

回答

5

你可以

  • 转换的代码列值到字符串(使用astype),
  • 然后使用groupby到组这些值根据索引,最后
  • 聚集使用''.join

import pandas as pd 
df = pd.read_table('data', sep='\s+') 
df = df.set_index('player_id') 
strjoin = ''.join 
print(df['code'].astype(str).groupby(df.index).agg(strjoin)) 

产量

player_id 
223336  454 
225987  234 
Name: code, dtype: object 

另一种选择是

  • groupby索引,
  • 然后使用join_digits,其通过10 功率中的值相乘,然后相加的聚集组结果。
  • 使用astype(str)到整数转换为字符串

def join_digits(series): 
    return (series * 10**np.arange(len(series)-1, -1, -1)).sum() 

df['code'].groupby(df.index).agg(join_digits).astype(str) 

产量

player_id 
223336  454 
225987  234 
Name: code, dtype: int64 

注意,但是,使用整数计算会给出不同的结果,如果第一种方法在df['code']中的整数不是一位数字。而且,如果最左边的数字是零,则零点将被丢弃。

+0

如果对某个问题曾经有过pythonic答案,那就是这个。 – 2015-01-21 02:27:08