假设存在 2 个 DataFrames A
和 B
,如下所示
A
:
a A
b B
c C
B
:
1 2
3 4
如何生成C
DataFrame之类的
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/