#python #pandas #list #dataframe
#python #pandas #Список #фрейм данных
Вопрос:
У меня есть два фрейма данных, которые мне нужно объединить в строку.
Такие фреймы выглядят так, как показано ниже.
Он выдает ошибку (не хэшируемый тип: ‘список’).
Я думаю, что есть проблема с добавлением элементов списка (например) [0, 0, 0, 1] или [0, 0, 1, 0].
Ответ №1:
Вот пример того, в чем, по моему мнению, заключается ваша проблема. Я использую два фрейма данных ниже в качестве примера:
DF 1 :
| A B
--- ----------------------------
0 | 'A' ['A', 'B']
1 | 'B' ['B', 'D']
2 | 'C' ['D', 'E', 'F']
DF 2 :
| C D
--- ----------------------------
0 | 'A' 'X'
1 | 'B' 'Y'
2 | 'C' 'Z'
Сначала вы хотите разобраться с неинвестированием. Затем выполните слияние:
df3=unnesting(df1,['B'])
df3.merge(df2,left_on='B',right_on='C',how='inner').drop('B',1).merge(df1)
Out[15]:
A C D B
0 A A X [A, B]
1 A B Y [A, B]
2 B B Y [B, D]
Вот функция для отмены вложения:
def unnesting(df, explode):
idx=df.index.repeat(df[explode[0]].str.len())
df1=pd.concat([pd.DataFrame({x:np.concatenate(df[x].values)} )for x in explode],axis=1)
df1.index=idx
return df1.join(df.drop(explode,1),how='left')