我有2个具有以下格式的数据帧:
df1
ID age
[111, 222, 333] 15
[444] 9
[555, 666, 777, 888] 8
df2
ID school
222 A
777 B
我需要通过匹配ID来连接它们,以获得以下结果
df1_ID age df2_ID school
[111, 222, 333] 15 222 A
[555, 666, 777, 888] 8 777 B
df1_ID可能是最多10个ID的列表,我想不出一种有效地连接数据帧的方法。您将如何处理?谢谢。
答案 0 :(得分:0)
如果要有效地处理数据,则必须更改格式,因为在大熊猫中使用list
显然是slow。
from itertools import chain
df11 = pd.DataFrame({
'ID' : list(chain.from_iterable(df1['ID'].tolist())),
'age' : df1['age'].values.repeat(df1['ID'].str.len())
})
print (df11)
ID age
0 111 15
1 222 15
2 333 15
3 444 9
4 555 8
5 666 8
6 777 8
7 888 8
df12 = df11.merge(df2, on='ID', how='left')
print (df12)
ID age school
0 111 15 NaN
1 222 15 A
2 333 15 NaN
3 444 9 NaN
4 555 8 NaN
5 666 8 NaN
6 777 8 B
7 888 8 NaN
答案 1 :(得分:0)
尝试:
df3 = df1.apply(lambda x: x if set(x[0]).intersection(set(df2['ID'])) else None, axis = 1)
df3 = df3.dropna().set_index('ID')
df3.reset_index(inplace = True)
final_df = pd.concat([df3, df2], axis = 1)