我有很多python数据框,我希望这些数据框中的每一个在列上具有相同的值。我如何做到这一点?创建Python数据框与其他数据框相同的列值
实施例:
- DataFrame_1具有带有字符的列A,B,V,d
- DataFrame_2具有字符列d,C,B
- DataFrame_3具有炭A中的列中,乙
我怎么可以用字符B,B,B返回一个数据框(因为B是所有dataframes)
我有很多python数据框,我希望这些数据框中的每一个在列上具有相同的值。我如何做到这一点?创建Python数据框与其他数据框相同的列值
实施例:
我怎么可以用字符B,B,B返回一个数据框(因为B是所有dataframes)
一个令人费解的方法是使用多个嵌套调用isin
:
In [39]:
df=pd.DataFrame({'a':['A','B','V','D']})
df1=pd.DataFrame({'a':['D','C','B']})
df2=pd.DataFrame({'a':['A','B']})
df[df.a.isin(df1[df1.a.isin(df2.a)].a)]
Out[39]:
a
1 B
另一种方法是调用np.intersect1d
,这个假设值是唯一的:
In [46]:
np.intersect1d(df2.a.unique(), np.intersect1d(df.a.unique(), df1.a.unique()))
Out[46]:
array(['B'], dtype=object)
同样,我们可以执行2内merges这将合并所有dfs中存在的值:
In [47]:
df.merge(df1, on='a').merge(df2, on='a')
Out[47]:
a
0 B
计时
In [48]:
%timeit df[df.a.isin(df1[df1.a.isin(df2.a)].a)]
1000 loops, best of 3: 1.51 ms per loop
In [49]:
%timeit np.intersect1d(df2.a.unique(), np.intersect1d(df.a.unique(), df1.a.unique()))
1000 loops, best of 3: 360 µs per loop
In [50]:
%timeit df.merge(df1, on='a').merge(df2, on='a')
100 loops, best of 3: 4.76 ms per loop
的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
集合类型'set' - 从Python 2.4开始就是内建的,从2.6开始不推荐使用,并且在3.x +中移除...因此,除非OP使用Python 2.3,否则不鼓励使用'sets'模块。 – 2015-03-09 08:29:55
我使用2.7.9和上面的代码工作正常。 https://docs.python.org/2/library/sets.html – Alexander 2015-03-09 08:52:43
它会......但就像我说的那样 - 不推荐......只是'new_set = set(df.iloc [:,0]) '会很好,例如...... – 2015-03-09 08:58:06
要获得唯一的值所有三个DF的,你可以使用:
unique_vals = set(df1['col']).intersection(df2['col'], df3['col'])
这将(不出所料)给你一个set
,然后你就可以放回一个DF /系列,如你所愿。
您能否澄清一下栏目?字母A,B,C等是列的名称,还是它们是列数据中的值?如果是后者,那么三个数据框中列的名称是什么?他们都一样吗? – Alexander 2015-03-09 00:18:15
A,B,C字母是列中的值。三个数据框中列的名称相同。 – user3698971 2015-03-09 07:22:50