两个表之间的连接有问题。更具体地说,我有第一个表(Df_1),该表具有列'B'和树行。在“ B”列的每一行中,我都有一个包含三个值的单元格(B列中的9个值位于三行中),确切地说,每个单元格都有一个包含三个值的数组。另外,我有两列具有单个值。
在第二张表中,我有九行。并且“名称”列中的数据与“ B”列中第一帧中的数据相同。但是在这里,它们是分开的,每行分别用于不同的行。
我假设我需要第一帧,将其更改为九行。就这些向量而言,我必须打破。然后将两个框架分别连接到第一个框架中的此新列和第二个框架中的“名称”列。
这是三行的第一帧:
Df_1 = pd.DataFrame({
'A': ['White','Black','Yellow'],
'B': [['lamp','bed','wardrobe'],['sink','glass','towel'],['kitchen','toilet','room']],
'C': [4,2,9]
})
这是九帧的第二帧:
Df_2 = pd.DataFrame({'Number' :['six','one','nine','ten','four','five','two','three','nine'],
'Name': ['lamp','bed','wardrobe','sink','glass','towel','kitchen','toilet','room'],
'Description': ['large','small','loud','weak','loyal','loyal','loud','large','small']})
这是第三帧,这是第一帧和第二帧的基础。
Df_3 = pd.DataFrame({'A': ['white','white','white','Black','Black','Black','Yellow','Yellow','Yellow'],
'Name': ['lamp','bed','wardrobe','sink','glass','towel','kitchen','toilet','room'],
'C': [4,4,4,2,2,2,9,9,9],
'Description': ['large','small','loud','weak','loyal','loyal','loud','large','small']
})
答案 0 :(得分:0)
也许有人知道一种更有效的方法,但是您可以蛮力地使用它并使用循环。
temp_list = []
for index,row in Df_1.iterrows():
for e in row['B']:
temp_list.append((row['A'],row['C'],e))
temp_df = pd.DataFrame(temp_list,columns = ['A','C','B'])
Df_3 = Df_2.merge(temp_df, left_on = 'Name',right_on = 'B')
答案 1 :(得分:0)
尝试这种方法:
爆炸Df_1
#Intermediate step to unpack column B
intermediate_df = pd.concat([Df_1.drop('B', axis='columns'), pd.DataFrame(Df_1.B.values.tolist(), index=Df_1.index, columns=['B1', 'B2', 'B3'])], axis=1)
intermediate_df
A C B1 B2 B3
0 White 4 lamp bed wardrobe
1 Black 2 sink glass towel
2 Yellow 9 kitchen toilet room
Df_1_final = Df_1_extended.melt(id_vars=['A', 'C'], value_name='Type')
Df_1_final
A C variable Type
0 White 4 B1 lamp
1 Black 2 B1 sink
2 Yellow 9 B1 kitchen
3 White 4 B2 bed
4 Black 2 B2 glass
5 Yellow 9 B2 toilet
6 White 4 B3 wardrobe
7 Black 2 B3 towel
8 Yellow 9 B3 room
合并到Df_2
然后,您只需要使用merge将Df_1_final合并为Df_2,然后选择所需的列
final_df = Df_2.merge(Df_1_final, left_on=['Name'], right_on=['type']).loc[:, ['A', 'Name', 'C', 'Description']]
产生与Df_3完全相同的
final_df
A Name C Description
0 White lamp 4 large
1 White bed 4 small
2 White wardrobe 4 loud
3 Black sink 2 weak
4 Black glass 2 loyal
5 Black towel 2 loyal
6 Yellow kitchen 9 loud
7 Yellow toilet 9 large
8 Yellow room 9 small