我有一个Pandas DataFrame,看起来像这样:
df = pd.DataFrame({'col1': [1, 2, 3],
'col2': [4, 5, 6],
'col3': [7, 8, 9]})
df
col1 col2 col3
0 1 4 7
1 2 5 8
2 3 6 9
我想创建一个像这样的Pandas DataFrame:
df_new
col1 col2 col3
0 1 4 7
1 1 5 8
2 1 6 9
3 2 4 7
4 2 5 8
5 2 6 9
6 3 4 7
7 3 5 8
8 3 6 9
是否有内置的或内置的Pandas方法组合可以实现这一点?
即使在df
中有重复,我也希望输出是相同的格式。换句话说:
df
col1 col2 col3
0 1 4 7
1 2 5 8
2 2 6 8
df_new
col1 col2 col3
0 1 4 7
1 1 5 8
2 1 6 8
3 2 4 7
4 2 5 8
5 2 6 8
6 2 4 7
7 2 5 8
8 2 6 8
提前感谢您的任何建议!
6条答案
按热度按时间dba5bblo1#
我很想看到一个更pythonic或'Pandas专属'的答案,但这一个也很好!
q35jwt9p2#
我也会像@亨利在评论中建议的那样选择交叉
merge
:输出:
不同方法的比较:
nhaq1z213#
您可以连接 Dataframe 的副本,将每个副本中的
col1
替换为col1
中的每个值:输出:
如果您愿意,可以使用
fcwjkofz4#
你可以使用
np.repeat
和np.tile
来获得预期的输出:输出:
你可以创建一个泛型函数:
用途:
kqqjbcuj5#
另一种可能的解决方案,基于
itertools.product
:输出:
hl0ma9xz6#
一个选项是complete from pyjanitor:
complete主要用于暴露丢失的行上面的输出只是一个很好的副作用。一个更合适的,虽然相当冗长的选项是expand_grid: