Pandas 如何根据其他列的匹配索引将列表返回到数据帧中
我有两个数据帧,一个由一列numpy数组列表组成,另一个由两列组成。我试图通过基于索引的匹配来匹配第一个数据帧(df)中的元素,以从df2中获得两列o1和o2。我想知道我能不能得到一些信息。。请注意,“o1”列中的字符串“A1”在df2中重复了两次,正如您在所需的输出数据帧中看到的,重复的字符串在o1列中被删除Pandas 如何根据其他列的匹配索引将列表返回到数据帧中,pandas,list,numpy,dataframe,Pandas,List,Numpy,Dataframe,我有两个数据帧,一个由一列numpy数组列表组成,另一个由两列组成。我试图通过基于索引的匹配来匹配第一个数据帧(df)中的元素,以从df2中获得两列o1和o2。我想知道我能不能得到一些信息。。请注意,“o1”列中的字符串“A1”在df2中重复了两次,正如您在所需的输出数据帧中看到的,重复的字符串在o1列中被删除 import numpy as np import pandas as pd array_1 = np.array([[0, 2, 3], [3, 4, 6], [1,2,3,6]])
import numpy as np
import pandas as pd
array_1 = np.array([[0, 2, 3], [3, 4, 6], [1,2,3,6]])
#dataframe 1
df = pd.DataFrame({ 'A': array_1})
#dataframe 2
df2 = pd.DataFrame({ 'o1': ['A1', 'B1', 'A1', 'C1', 'D1', 'E1', 'F1'], 'o2': [15, 17, 18, 19, 20, 7, 8]})
#desired output
df_output = pd.DataFrame({ 'A': array_1, 'o1': [['A1', 'C1'], ['C1', 'D1', 'F1'], ['B1','A1','C1','F1']],
'o2': [[15, 18, 19], [19, 20, 8], [17,18,19,8]] })
# please note in the output, the 'index 0 of df1 has 0&2 which have same element i.e. 'A1', the output only shows one 'A1' by removing duplicated one.
我相信您可以分解
df
并使用它从df2
中提取信息,然后最终加入df
s = df['A'].explode()
df_output= df.join(df2.loc[s].groupby(s.index).agg(lambda x: list(set(x))))
输出:
A o1 o2
0 [0, 2, 3] [C1, A1] [18, 19, 15]
1 [3, 4, 6] [F1, D1, C1] [8, 19, 20]
2 [1, 2, 3, 6] [F1, B1, C1, A1] [8, 17, 18, 19]
我想知道如何删除与已删除的“A1”关联的副本,在这种情况下,如何删除o2列中的18,索引0?那么o1中元素的数量和o2相同?