2017-03-13 9 views
1

Wie man richtig concat (oder vielleicht das ist .merge()?) N Datenrahmen mit den gleichen Spaltennamen, so dass ich sie mit distinguished Spaltenschlüssel gruppieren könnte. Für die Ex:Pandas: Wie gruppiert man auf verketteten Datenrahmen mit gleichen Spaltennamen?

dfs = { 
    'A': df1, // columns are C1, C2, C3 
    'B': df2, // same columns C1, C2, C3  
} 
gathered_df = pd.concat(dfs.values()).groupby(['C2'])['C3']\ 
    .count()\ 
    .sort_values(ascending=False)\ 
    .reset_index() 

Ich möchte so etwas wie

|----------|------------|-------------| 
|   | A  |  B  | 
| C2_val1 | count_perA | count_perB | 
| C2_val2 | count_perA | count_perB | 
| C2_val3 | count_perA | count_perB | 

Antwort

1

Ich glaube, Sie reset_index brauchen, um für Spalten erstellen aus MultiIndex und fügen Sie dann Spalte groupby dor Datenrahmen unterscheiden. Letzte reshape von unstack:

gathered_df = pd.concat(dfs).reset_index().groupby(['C2','level_0'])['C3'].count().unstack() 

What is the difference between size and count in pandas?

Probe:

df1 = pd.DataFrame({'C1':[1,2,3], 
        'C2':[4,5,5], 
        'C3':[7,8,np.nan]}) 


df2 = df1.mul(10).fillna(1) 
df2.C2 = df1.C2 

print (df1) 
    C1 C2 C3 
0 1 4 7.0 
1 2 5 8.0 
2 3 5 NaN 

print (df2) 
    C1 C2 C3 
0 10 4 70.0 
1 20 5 80.0 
2 30 5 1.0 

dfs = { 
    'A': df1, 
    'B': df2  
} 

gathered_df = pd.concat(dfs).reset_index().groupby(['C2','level_0'])['C3'].count().unstack() 
gathered_df.index.name = None 
gathered_df.columns.name = None 
print (gathered_df) 
    A B 
4 1 1 
5 1 2 
Verwandte Themen