Я хочу добавить значения между тремя или более DataFrames через список вместо того, чтобы делать их по одному.
Во-первых, я буду использовать merge в качестве примера.
Следующая строка объединяет кадры данных (data0
, data1
, data2
) по одному:
final_data = data0.merge(data1, on=['player_id', 'player_name'])
final_data = final_data.merge(data2, on=['player_id', 'player_name'])
Однако вместо этого я мог бы объединить DataFrames через список, который значительно помогает при работе с большим количеством DF, таких как этот:
data_list = [data0, data1, data2]
final_data = reduce(lambda left, right: pd.merge(left, right, on=['player_id', 'player_name']), data_list)
Итак, у меня есть следующие три DataFrames, и я хотел бы добавить значения между ними.
data0
player_id player_name ab run hit
0 28920 S. Smith 0 0 0
1 33351 T. Mancini 0 0 0
2 30267 C. Gentry 0 0 0
3 28513 A. Jones 0 0 0
4 31097 M. Machado 0 0 0
5 29170 C. Davis 0 0 0
6 29322 M. Trumbo 0 0 0
7 29564 W. Castillo 0 0 0
8 34885 H. Kim 0 0 0
9 32952 J. Rickard 0 0 0
10 31988 J. Schoop 0 0 0
11 5908 J.J. Hardy 0 0 0
Далее
data1
:
player_id player_name ab run hit
0 28920 S. Smith 1 4 6
1 33351 T. Mancini 0 0 2
2 28513 A. Jones 2 1 0
3 31097 M. Machado 1 8 0
4 34885 H. Kim 1 1 2
5 32952 J. Rickard 0 2 0
6 31988 J. Schoop 5 3 4
7 5908 J.J. Hardy 4 2 10
А дальше
data2
player_id player_name ab run hit
0 28920 S. Smith 1 9 2
1 31097 M. Machado 3 3 3
2 29170 C. Davis 9 6 4
3 29322 M. Trumbo 3 5 7
4 32952 J. Rickard 1 3 4
5 5908 J.J. Hardy 0 0 5
Окончательный DataFrame, который я ищу, должен выглядеть следующим образом:
final_data
player_id player_name ab run hit
0 28920 S. Smith 2 13 8
1 33351 T. Mancini 0 0 2
2 30267 C. Gentry 0 0 0
3 28513 A. Jones 2 1 0
4 31097 M. Machado 4 11 3
5 29170 C. Davis 9 6 4
6 29322 M. Trumbo 3 5 7
7 29564 W. Castillo 0 0 0
8 34885 H. Kim 1 1 2
9 32952 J. Rickard 1 5 4
10 31988 J. Schoop 5 3 4
11 5908 J.J. Hardy 4 2 15
Я мог бы получить результат с помощью следующего кода, но он добавляет кадры данных один за другим.
data0 = pd.read_csv('initial_df.csv')
data1 = pd.read_csv('add_vals1.csv')
data2 = pd.read_csv('add_vals2.csv')
data0 = data0.set_index(['player_id', 'player_name'])
data1 = data1.set_index(['player_id', 'player_name'])
data2 = data2.set_index(['player_id', 'player_name'])
final_data = data0.add(data1, fill_value=0).astype(int).reset_index()
final_data = final_data.set_index(['player_id', 'player_name'])
final_data = final_data.add(data2, fill_value=0).astype(int).reset_index()
Может ли кто-нибудь помочь, чтобы получить окончательный результат через список, как я сделал с функцией слияния вверху? Большое вам спасибо!