簡體   English   中英

使用熊貓按列合並,平均和分組多個csv

[英]merge, average and group multiple csv by columns using pandas

我有多個要處理的csv文件,其中有20個左右,在此我以它們為例

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”和“ hero”合並在一起,按“ mat”進行排序,並且還對“ kill,deth,ast,xp和gold”列取平均值。這是我想到的輸出

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')

它刪除了“ leag”,“ opp”,“ team”列,而不是合並“ acc”和“ hero”,而是在第一列的所有行中都給出了“ acc,hero”

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

您可以使用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', '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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM