假设我有一个列表和一个pandas数据帧
import pandas as pd
x = pd.DataFrame({'a': range(2), 'b': range(2)})
y = [1,2,3]
我希望得到一个看起来大致如此的数据框:
a b y
0 0 1
1 1 1
0 0 2
1 1 2
0 0 3
1 1 3
有一种简单的方法吗?
答案 0 :(得分:10)
这称为cartesian product。转换为dataframe
>>> y = pd.DataFrame(y, columns=list('y'))
添加常量键
>>> x['k'] = 1
>>> y['k'] = 1
并合并
>>> pd.merge(y, x, on='k')[['a', 'b', 'y']]
a b y
0 0 0 1
1 1 1 1
2 0 0 2
3 1 1 2
4 0 0 3
5 1 1 3