Python 数据帧重复组合

Python 数据帧重复组合,python,pandas,Python,Pandas,我有数据帧df1和df2: df1 = pd.DataFrame(['A1','A2']) 0 0 A1 1 A2 df2 = pd.DataFrame(pd.date_range('2016-01-01',periods = 2, freq = '1D')) 0 0 2016-01-01 1 2016-01-02 我怎么才能得到这个数据帧 0 1 0 A1 2016-01-01 1 A1 2016-01-02 2 A2 2016-

我有数据帧df1和df2:

df1 = pd.DataFrame(['A1','A2']) 
    0
0  A1
1  A2
df2 = pd.DataFrame(pd.date_range('2016-01-01',periods = 2, freq = '1D'))
           0
0 2016-01-01
1 2016-01-02
我怎么才能得到这个数据帧

    0    1
0  A1  2016-01-01
1  A1  2016-01-02
2  A2  2016-01-01
3  A2  2016-01-02

您必须使用
pandas.concat
来展开数据帧,然后合并数据帧

import pandas as pd
# test data
df1 = pd.DataFrame(['A1','A2']) 
df2 = pd.DataFrame(pd.date_range('2016-01-01',periods = 2, freq = '1D'))

# expand dataframes to cover all varinats and get the same lengths
df3 = pd.concat([df1]*len(df2), ignore_index=True)
df4 = pd.concat([df2]*len(df2), ignore_index=True)

# final concat to merge dataframes
print (pd.concat([df3,df4],axis=1, ignore_index=True))
输出:

    0          1
0  A1 2016-01-01
1  A2 2016-01-02
2  A1 2016-01-01
3  A2 2016-01-02
您可以使用itertools:

import itertools as it

pd.DataFrame(list(it.product(df1[0], df2[0])))
    0          1
0  A1 2016-01-01
1  A1 2016-01-02
2  A2 2016-01-01
3  A2 2016-01-02
itertools
返回一个生成器,因此在将其转换为数据帧之前需要将其转换为列表

it.product
在两个iterables对象之间进行所有组合,例如:

["".join(i) for i in it.product("ABC", "ABC")]
['AA', 'AB', 'AC', 'BA', 'BB', 'BC', 'CA', 'CB', 'CC']

我只知道这个产品叫“笛卡尔积”,谢谢!