简体   繁体   中英

using .loc to assign values from another dataframe by index returns : ValueError: Must have equal len keys and value when setting with an iterable

df_state_group:

Index State assigned_airport
4 Florida NaN
5 Florida NaN
6 Florida NaN
7 Florida NaN

df1:

Index State assigned_airport
0 Washington NaN
1 New York NaN
2 Illinois NaN
3 Texas NaN
4 Florida NaN
5 Florida NaN
6 Florida NaN
7 Florida NaN
8 Ohio NaN
9 Colorado NaN
10 Michigan NaN
11 Indiana NaN

df_airports:

Index airports
0 a
1 b
2 c
3 d
4 e
5 f

index_nearest_airport:

[3]

desired outcome:

df1:

Index State assigned_airport
0 Washington NaN
1 New York NaN
2 Illinois NaN
3 Texas NaN
4 Florida d
5 Florida d
6 Florida d
7 Florida d
8 Ohio NaN
9 Colorado NaN
10 Michigan NaN
11 Indiana NaN

df_state_group is a subset of df1 for the state of Florida

I have tried:

df1.loc[df_state_group.index, 'assigned_airport'] = df_airports.loc[index_nearest_airport,'airports'].values

but I keep on geting the error: ValueError: Must have equal len keys and value when setting with an iterable

This will do:

(df1.assign(assigned_airport= 
     pd.DataFrame(np.repeat(df_airports.loc[index_nearest_airport,'airports'].values
     ,df_state_group.shape[0]), columns = ['assigned_airport'],index=df_state_group.Index)))

OR

(df1.loc[df_state_group.Index, 'assigned_airport'] = 
     np.repeat(df_airports.loc[index_nearest_airport,'airports'].values,
     df_state_group.shape[0]))
Index State assigned_airport
0 Washington NaN
1 New York NaN
2 Illinois NaN
3 Texas NaN
4 Florida d
5 Florida d
6 Florida d
7 Florida d
8 Ohio NaN
9 Colorado NaN
10 Michigan NaN
11 Indiana NaN

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM