使用来自其他数据帧的相同列值创建Python数据帧
我有许多python数据帧,我希望这些数据帧中的每一个在on列中具有相同的值。我怎么能做到 例如: 数据帧_1有一列,其中包含字符a、B、V、D DataFrame_2有一个包含字符D、C、B的列 数据帧_3有一个带有字符a、B的列使用来自其他数据帧的相同列值创建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
如何返回包含字符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'])