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

Tra*_*VOX 0 python pandas

如果我有以下DataFrame ...

           code
player_id      
223336        4
223336        5
223336        4
225987        2
225987        3
225987        4
Run Code Online (Sandbox Code Playgroud)

如何将"代码"列合并为一个字符串,以便结果看起来像......

             code
player_id      
223336        454
225987        234
Run Code Online (Sandbox Code Playgroud)

谢谢!

unu*_*tbu 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))
Run Code Online (Sandbox Code Playgroud)

产量

player_id
223336       454
225987       234
Name: code, dtype: object
Run Code Online (Sandbox Code Playgroud)

另一种选择是

  • groupby 指数,
  • 然后使用聚合组join_digits,将值乘以10的幂,然后对结果求和.
  • 用于astype(str)将int转换为字符串

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)
Run Code Online (Sandbox Code Playgroud)

产量

player_id
223336       454
225987       234
Name: code, dtype: int64
Run Code Online (Sandbox Code Playgroud)

但是,请注意,如果ints df['code']不是单位数字,则使用整数计算将得到与第一种方法不同的结果.而且,如果最左边的数字为零,则将丢弃零.