1 回答

TA貢獻1847條經(jīng)驗 獲得超7個贊
這是實現(xiàn)問題第一部分預期結果的一種方法,第二部分在以預期格式獲取數(shù)據(jù)后應該是直截了當?shù)摹?/p>
1. 預處理
預處理表 B,使其每個 ID 都有一行。您可以執(zhí)行groupbyB_ID_1 并傳遞一個函數(shù)來展平組:
def flatten_group(x):
n = len(x)
vals = x.iloc[:,1:].values.flatten().reshape(1, -1)
names = np.char.add(
np.array(['B_Value_1_', 'B_Value_2_']*n),
np.repeat(np.arange(1, n+1).astype(str), 2)
)
return pd.DataFrame(data=vals, columns=names)
b_prep = b.groupby('B_ID_1').apply(flatten_group).reset_index(level=0)
2.左連接
在這里你只需做一個左連接
pd.merge(a,b_prep,how='left', left_on='ID_1', right_on='B_ID_1').drop('B_ID_1', axis=1)
細節(jié)
b_prep
B_ID_1 B_Value_1_1 B_Value_2_1 B_Value_1_2 B_Value_2_2 B_Value_1_3 \
0 1 abcd N_1 abc N_2 NaN
0 3 GHI_1 N_3 GHI_2 N_3 GHI_3
B_Value_2_3 B_Value_1_4 B_Value_2_4
0 NaN NaN NaN
0 N_3 GHI_4 N_3
pd.merge
ID_1 Value_1 Value_2 B_Value_1_1 B_Value_2_1 B_Value_1_2 B_Value_2_2 \
0 1 ABC N_1 abcd N_1 abc N_2
1 2 DEF N_2 NaN NaN NaN NaN
2 3 GHI N_3 GHI_1 N_3 GHI_2 N_3
B_Value_1_3 B_Value_2_3 B_Value_1_4 B_Value_2_4
0 NaN NaN NaN NaN
1 NaN NaN NaN NaN
2 GHI_3 N_3 GHI_4 N_3
添加回答
舉報