簡體   English   中英

如何通過 pandas 中的循環加入多個數據幀?

[英]How to Join Multiple DataFrames through loop in pandas?

df1: 

Id   Name
101  Rick
102  Nick
103  Jerry

df2:

Id   Class
101  A
102  B
103  C

df3:

Id   Grade
101  1
102  2
103  3

我需要通過循環合並多個數據框。

I tried:

data_frames= []
for file in os.listdir(folder_path):
    file.append(data_frames)

final_df = pd.merge(data_frames, how='left', on='Id')
TypeError: merge() missing 1 required positional argument: 'right'

Output:

    Id   Name  Class Grade
    101  Rick  A     1
    102  Nick  B     2
    103  Jerry C     3
#Import pandas
import pandas as pd


df1 = [[101, "Rick"],[102, "Nick"],[103, "Jerry"]]

df2 = [[101, "A"],[102, "B"],[103, "C"]]

df3 = [[101, 1],[102, 2],[103, 3]]

df1 = pd.DataFrame(df1, columns=["Id","Name"])
df2 = pd.DataFrame(df2, columns=["Id","Class"])
df3 = pd.DataFrame(df3, columns=["Id","Grade"])

df_final_mode1 = df1.merge(df2, left_on='Id', right_on='Id')
df_final_mode1 = df_final_mode1.merge(df3, left_on='Id', right_on='Id')

print('=== mode 1 - Merge ===')
print(df_final_mode1)

print()

print('=== mode 2 - Loop ===')
df_final_mode2 = df1

for index, (id, class_) in df2.iterrows():
    df_final_mode2.loc[df_final_mode2.Id == id, 'Class'] = df2.loc[df_final_mode2.Id == id, 'Class']

for index, (id, grade) in df3.iterrows():
    df_final_mode2.loc[df_final_mode2.Id == id, 'Grade'] = df3.loc[df_final_mode2.Id == id, 'Grade']

print(df_final_mode2)

在此處輸入圖像描述

方法是使用functools.reduce

from functools import reduce

reduce(lambda x,y: x.merge(y,on='Id', how='left'), dataframes )

Output:

    Id   Name Class  Grade
0  101   Rick     A      1
1  102   Nick     B      2
2  103  Jerry     C      3

您可以使用concat在其索引上合並多個數據幀。

data_frames = [df1, df2, df3]

# if "Id" is not already the index on these dataframes
data_frames [d.set_index("Id") for d in data_frames]
out = pd.concat(data_frames, axis=1)

print(out)
      Name Class  Grade
Id
101   Rick     A      1
102   Nick     B      2
103  Jerry     C      3

暫無
暫無

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

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