使用来自其他数据帧的相同列值创建Python数据帧

使用来自其他数据帧的相同列值创建Python数据帧,python,numpy,pandas,unique,dataframe,Python,Numpy,Pandas,Unique,Dataframe,我有许多python数据帧,我希望这些数据帧中的每一个在on列中具有相同的值。我怎么能做到 例如: 数据帧_1有一列,其中包含字符a、B、V、D DataFrame_2有一个包含字符D、C、B的列 数据帧_3有一个带有字符a、B的列 如何返回包含字符B、B、B的数据帧,因为B在所有数据帧中。一种复杂的方法是使用多个嵌套调用: 另一种方法是调用,这假设值是唯一的: In [46]: np.intersect1d(df2.a.unique(), np.intersect1d(df.a.unique

我有许多python数据帧,我希望这些数据帧中的每一个在on列中具有相同的值。我怎么能做到

例如:

数据帧_1有一列,其中包含字符a、B、V、D DataFrame_2有一个包含字符D、C、B的列 数据帧_3有一个带有字符a、B的列
如何返回包含字符B、B、B的数据帧,因为B在所有数据帧中。一种复杂的方法是使用多个嵌套调用:

另一种方法是调用,这假设值是唯一的:

In [46]:

np.intersect1d(df2.a.unique(), np.intersect1d(df.a.unique(), df1.a.unique()))
Out[46]:
array(['B'], dtype=object)
同样,我们可以执行2次内部合并,这将合并所有dfs中存在的值:

In [47]:

df.merge(df1, on='a').merge(df2, on='a')
Out[47]:
   a
0  B
时间安排


numpy方法在该数据集上轻松获胜

将每个列视为一个集合,然后取交集如何:

df = pd.DataFrame({'col1': ['A', 'B', 'V', 'D'], 
                   'col2': ['D', 'C', 'B', 'B'], 
                   'col3': ['A', 'B', 'A', 'B']})

# First df column is a set
new_set = set(df.iloc[:, 0])  
# Iterate through remaining columns in df, taking intersection
for col in df.iloc[:, 1:]:
    new_set = set(df[col]).intersection(new_set)
将集合转换回数据帧或序列:

new_df = pd.DataFrame([new_set])
print(new_df)
   0
0  B

要获得所有三个DF中存在的唯一值,可以使用:

unique_vals = set(df1['col']).intersection(df2['col'], df3['col'])

不出所料,这将为您提供一套,然后您可以按照自己的意愿将其放回DF/系列。

请澄清这些列。字母A、B、C等是列的名称,还是列数据中的值?如果是后者,三个数据帧中的列的名称是什么?它们都一样吗?A、B、C字母是列中的值。三个数据帧中的列的名称相同。集合类型集合-自Python 2.4以来一直是内置的,自2.6以来已弃用,并在3.x+中删除。。。因此,除非OP使用Python2.3,否则不鼓励使用sets模块。它会。。。但是就像我说的-不推荐。。。例如,只需new_set=setdf.iloc[:,0]就可以了……我明白了。谢谢你的提示。我将修改上面的答案。
new_df = pd.DataFrame([new_set])
print(new_df)
   0
0  B
unique_vals = set(df1['col']).intersection(df2['col'], df3['col'])