2017-06-23 37 views
0

我有多個CSV文件上工作,其中約20ish列,在這裏我把合併,平均和組多個CSV使用熊貓

blink.csv

acc mat time win kill deth ast xp gold hero leag opp team 10 4286 123 FALSE 4 4 2 443 414 96 Fr Nb Wg 10 7329 133 FALSE 3 5 5 409 552 58 Fr Nb Wg 10 5557 144 TRUE 8 7 16 630 770 16 Fr FT Wg 10 7149 145 TRUE 7 3 7 602 601 15 Fr FT Wg 10 1034 148 TRUE 9 0 10 535 580 119 Br AA Wg 10 1861 149 TRUE 0 3 11 426 359 46 Br AA Wg

他們的例子faithbian.csv

acc mat time win kill deth ast xp gold hero leag opp team 13 4286 123 FALSE 1 5 11 455 592 22 Fr Nb Wg 13 7329 133 FALSE 2 7 2 422 159 55 Fr Nb Wg 13 5557 144 TRUE 6 1 12 145 195 99 Fr FT Wg 13 7149 145 TRUE 5 2 1 793 952 5 Fr FT Wg 13 1861 149 TRUE 2 1 12 693 102 11 Br AA Wg

iceice.csv

acc mat time win kill deth ast xp gold hero leag opp team 22 7329 133 FALSE 4 2 22 422 259 15 Fr Nb Wg 22 5557 144 TRUE 6 0 2 145 295 212 Fr FT Wg 22 7149 145 TRUE 1 1 1 793 252 2 Fr FT Wg 22 1034 148 TRUE 1 6 1 204 295 56 Br AA Wg 22 1861 149 TRUE 1 11 12 693 202 21 Br AA Wg

我腦子裏想的是什麼是「墊」合併「ACC」和「英雄」一起,梳理和也均列「殺,DETH,AST,XP,和黃金」 這是輸出我腦子裏想的

out.csv

acc mat time win kill deth ast xp gold hero leag opp team 10,13 4286 123 FALSE 2.5 4.5 6.5 434.5 503 96,22 Fr Nb Wg 10,13,22 7329 133 FALSE 3 4.6 9.6 422 323 58,55,15 Fr Nb Wg 10,13,22 5557 144 TRUE 6.6 2.6 10 ... ... 16,99,212 Fr FT Wg 10,13,22 7149 145 TRUE .. .. .. ... ... 15,5,2 Fr FT Wg 10,22 1034 148 TRUE .. .. .. ... ... 119,26,56 Br AA Wg 10,13,22 1861 149 TRUE .. .. .. ... ... 46,11,21 Br AA Wg

我嘗試使用此代碼,但它並沒有給我想要的輸出..

import pandas as pd 
blink = pd.read_csv('blink.csv',keep_default_na=False,na_values=[""]) 
faithbian = pd.read_csv('faithbian.csv',keep_default_na=False,na_values=[""]) 
iceice = pd.read_csv('iceice.csv',keep_default_na=False,na_values=[""]) 

df = pd.concat([blink,faithbian,iceice],axis=0) 
con_df = pd.concat([df.groupby(['mat'])['acc','hero'].apply(lambda x: "%s" % ','.join(x.astype(str))),df.groupby(['mat'])['kill','deth','ast','xp','gold'].mean()],axis=1) 
con_df.to_csv('out.csv') 

它刪除「聯賽戰利」,「奧普」,「團隊」一欄,並代替合併「ACC」和「英雄」,它在第一列了「ACC,英雄」中的所有行

任何人可以幫助我實現所需的真實輸出? 謝謝。

+0

。出於好奇,你究竟在做什麼?這是用來幹嘛的? – void

+0

這是我關於Dota 2比賽預測的最後一篇論文 – Adhi

+0

在任何一種分析中,在一列中有多個分隔值是不理想的,因爲您必須經歷解析和爭執才能將值用作指標。數據集,數據庫等最好每個單元有一個原子值。 – Parfait

回答

0

您可以張貼solultion之前使用groupby.agg

agg_dict = { 
    'acc': lambda x: "%s" % ','.join(x.astype(str)), 
    'hero': lambda x: "%s" % ','.join(x.astype(str)), 
    'kill': 'mean', 
    'deth': 'mean', 
    'ast': 'mean', 
    'xp': 'mean', 
    'gold': 'mean', 
} 
agg_df = df.groupby('mat').agg(agg_dict) 

,然後加入這個與包含數據幀的獨特['mat', 'time', 'win', 'leag', 'opp', 'team']

mat_df = df[['mat', 'time', 'win', 'leag', 'opp', 'team']].drop_duplicates() 

con_df = pd.merge(agg_df, mat_df, left_index=True, right_on='mat').reindex(df.index) 
+0

我在運行它時遇到'KeyError:'mat''錯誤 – Adhi

+0

我試着在agg_dic的'mat'上添加'mat':lambda x:「%s」%','。join(x.astype(str)) ,'它給了我這個錯誤'AttributeError:'DataFrame'對象沒有屬性're_index''我試着改變're_index'爲'reindex',但它使我的所有列都變空白,它只留下最上面一行 – Adhi

+0

你有'KeyError'因爲'mat'成爲'agg_df'的索引。我修復了代碼。 're_index'是一個輸入錯誤 –