df10とdf20(そしてさらに多くのデータフレーム)を同時にfuncで渡し、後で使用するために名前を保持する方法はありますか?同時に複数のデータフレームを関数に渡す
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': ['d','d','d','d','d','d','g','g','g','g','g','g','k','k','k','k','k','k'],
'B': [5,5,6,4,5,6,-6,7,7,6,-7,7,-8,7,-6,6,-7,50],
'C': [1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2],
'S': [2012,2013,2014,2015,2016,2012,2012,2014,2015,2016,2012,2013,2012,2013,2014,2015,2016,2014]
});
df10 = (df.B + df.C).groupby([df.A, df.S]).agg(['sum','size']).unstack(fill_value=0)
df20 = (df['B'] - df['C']).groupby([df.A, df.S]).agg(['sum','size']).unstack(fill_value=0)
def func(df):
df1 = df.groupby(level=0, axis=1).sum()
new_cols= list(zip(df1.columns.get_level_values(0),['total'] * len(df.columns)))
df1.columns = pd.MultiIndex.from_tuples(new_cols)
df2 = pd.concat([df1,df], axis=1).sort_index(axis=1).sort_index(axis=1, level=1)
df2.columns = ['_'.join((col[0], str(col[1]))) for col in df2.columns]
df2.columns = df2.columns.str.replace('sum_','')
df2.columns = df2.columns.str.replace('size_','T')
return df2
EDIT、要求ごとにデータフレームが印刷されます。
プリント(DF10) プリント(DF20)は
df10:
sum size
S 2012 2013 2014 2015 2016 2012 2013 2014 2015 2016
A
d 13 6 7 5 6 2 1 1 1 1
g -11 8 8 8 7 2 1 1 1 1
k -6 9 48 8 -5 1 1 2 1 1
df20:
sum size
S 2012 2013 2014 2015 2016 2012 2013 2014 2015 2016
A
d 9 4 5 3 4 2 1 1 1 1
g -15 6 6 6 5 2 1 1 1 1
k -10 5 40 4 -9 1 1 2 1 1
プリントアウトが
あなたのコードをdf10とdf20のように見えるサンプルで表示することはできますか? – Chuck
関数を適用したいすべてのDataFramesのリストに対して 'for'ループを使うのが最も簡単だと思います。 'func'の後でこれらのDataFramesで何をしたいかによって異なります。 – josh