Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas 如何根据其他列的匹配索引将列表返回到数据帧中_Pandas_List_Numpy_Dataframe - Fatal编程技术网

Pandas 如何根据其他列的匹配索引将列表返回到数据帧中

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]])

我有两个数据帧,一个由一列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]]) 

#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相同?