pandas - 如何在 Pandas 中的 2 个 DataFrame 之间进行交集匹配?

标签 pandas dataframe

假设存在 2 个 DataFrames AB,如下所示

A:

a A
b B
c C

B:

1 2
3 4

如何生成CDataFrame之类的

a  A  1 2
a  A  3 4
b  B  1 2
b  B  3 4
c  C  1 2
c  C  3 4

Pandas中有没有函数可以做这个操作?

最佳答案

首先,每个 DataFrame 中的所有值都必须是唯一的。

我认为您需要产品:

from  itertools import product

A = pd.DataFrame({'a':list('abc')})
B = pd.DataFrame({'a':[1,2]})

C = pd.DataFrame(list(product(A['a'], B['a'])))
print (C)
   0  1
0  a  1
1  a  2
2  b  1
3  b  2
4  c  1
5  c  2

Pandas 纯解决方案 MultiIndex.from_product :

mux = pd.MultiIndex.from_product([A['a'], B['a']])

C = pd.DataFrame(mux.values.tolist())
print (C)
   0  1
0  a  1
1  a  2
2  b  1
3  b  2
4  c  1
5  c  2
C = mux.to_frame().reset_index(drop=True)
print (C)
   0  1
0  a  1
1  a  2
2  b  1
3  b  2
4  c  1
5  c  2

merge 交叉连接的解决方案和由 assign 的相同标量填充的列:

df = pd.merge(A.assign(tmp=1), B.assign(tmp=1), on='tmp').drop('tmp', 1)
df.columns = ['a','b']
print (df)
   a  b
0  a  1
1  a  2
2  b  1
3  b  2
4  c  1
5  c  2

编辑:

A = pd.DataFrame({'a':list('abc'), 'b':list('ABC')})
B = pd.DataFrame({'a':[1,3], 'c':[2,4]})

print (A)
   a  b
0  a  A
1  b  B
2  c  C

print (B)
   a  c
0  1  2
1  3  4

C = pd.merge(A.assign(tmp=1), B.assign(tmp=1), on='tmp').drop('tmp', 1)
C.columns = list('abcd')
print (C)
   a  b  c  d
0  a  A  1  2
1  a  A  3  4
2  b  B  1  2
3  b  B  3  4
4  c  C  1  2
5  c  C  3  4

关于pandas - 如何在 Pandas 中的 2 个 DataFrame 之间进行交集匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45687731/

相关文章:

Python 绘图字典

python - 从 Pandas 中的单个字符串列创建新的二进制列

python - 合并 Pandas 并仅输出选定的列

python - 为什么 groupby 操作的行为不同

python - 描述时间序列 Pandas 中的差距

python - 为什么 pandas 有时在选择列时似乎会更改字符串编码?

python - Pandas 中的逐元素异或

r - 将数据框中的前 2 列与 100 列交换?

r - 将多个数据帧存储到一个数据结构中-R

python-3.x - 无法逆转 pandas 数据帧中的第一个差异