Kaa*_*ake 7 python loops pandas
我想循环两个数据框的低谷名称,找到具有相同列名的列,并将它们组合以创建一个新的数据框。
我试图在for循环中编写if-else条件,但是它不起作用。
具体来说,我有两个像这样的数据框:
df1 = pd.DataFrame({'A': {'2019Q1': 1, '2019Q2': 2, '2019Q3': 3},
'B': {'2019Q1': 1, '2019Q2': 3, '2019Q3': 5},
'C': {'2019Q1': 2, '2019Q2': 4, '2019Q3': 6}})
df2 = pd.DataFrame({'A': {'2019Q1': 4, '2019Q2': 5, '2019Q3': 6},
'B': {'2019Q1': 1.5, '2019Q2': 3.3, '2019Q3': 5.6},
'C': {'2019Q1': 2.3, '2019Q2': 4.8, '2019Q3': 6.7}})
Run Code Online (Sandbox Code Playgroud)
我想要下面的输出-
对于A,输出=
pd.DataFrame({'df1': {'2019Q1': 1, '2019Q2': 2, '2019Q3': 3},
'df2': {'2019Q1': 4, '2019Q2': 5, '2019Q3': 6})
Run Code Online (Sandbox Code Playgroud)
对于B,输出=
pd.DataFrame({'df1': {'2019Q1': 1, '2019Q2': 3, '2019Q3': 5},
'df2': {'2019Q1': 1.5, '2019Q2': 3.3, '2019Q3': 5.6})
Run Code Online (Sandbox Code Playgroud)
对于C,输出=
pd.DataFrame({'df1': {'2019Q1': 2, '2019Q2': 4, '2019Q3': 6},
'df2': {'2019Q1': 2.3, '2019Q2': 4.8, '2019Q3': 6.7})
Run Code Online (Sandbox Code Playgroud)
非常感谢您的帮助!
这是一种类似于@ALollz的方法,但是将subdf保存在多个索引数据帧中
s = pd.concat([df1, df2], keys=['df1', 'df2']).unstack(0)
s.loc[:,'A']
Out[390]:
df1 df2
2019Q1 1 4
2019Q2 2 5
2019Q3 3 6
Run Code Online (Sandbox Code Playgroud)
由于这两个数据帧均按季度索引,因此您可以merge:
for col in np.union1d(df1.columns, df2.columns):
result = df1[[col]].merge(df2[[col]], how='outer', left_index=True, right_index=True)
result.index.name = col
result.columns = ['df1', 'df2']
print(result)
Run Code Online (Sandbox Code Playgroud)
结果:
df1 df2
A
2019Q1 1 4
2019Q2 2 5
2019Q3 3 6
df1 df2
B
2019Q1 1 1.5
2019Q2 3 3.3
2019Q3 5 5.6
df1 df2
C
2019Q1 2 2.3
2019Q2 4 4.8
2019Q3 6 6.7
Run Code Online (Sandbox Code Playgroud)