2015-01-21 84 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