将DataFrame行值合并为逐个字符串

时间:2015-01-21 02:04:35

标签: python pandas

如果我有以下DataFrame ......

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

如何将“code”列合并为一个字符串,以便结果看起来像......

             code
player_id      
223336        454
225987        234

谢谢!

1 个答案:

答案 0 :(得分: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']中的整数不是单位数字,则使用整数计算会得到与第一种方法不同的结果。而且,如果最左边的数字为零,则零将被丢弃。