我有以下数据框
现在,我想传输 Dataframe ,如下所示
我已经用python命令来做了,但是没有一个成功的。有人能帮助我做这个吗?n_df = pd.连续([df] * 最终_n)newdf = pd. Dataframe (np.重复(df.值,最终_n,轴=0))
mcdcgff01#
使用itertools库的函数product
itertools
product
from itertools import product combi_rows = product(df.store.dropna(), df.mas_id.dropna()) new_df = pd.DataFrame(combi_rows, columns=df.columns)
输出量
store mas_id 0 100.0 1 1 100.0 2 2 100.0 3 3 100.0 4 4 101.0 1 5 101.0 2 6 101.0 3 7 101.0 4 8 102.0 1 9 102.0 2 10 102.0 3 11 102.0 4
编辑:如果要按mas_id列进行排序,
mas_id
new_df = new_df.sort_values('mas_id')
store mas_id 0 100.0 1 4 101.0 1 8 102.0 1 1 100.0 2 5 101.0 2 9 102.0 2 2 100.0 3 6 101.0 3 10 102.0 3 3 100.0 4 7 101.0 4 11 102.0 4
bogh5gae2#
您可以将itertools的函数product
import itertools result = pd.DataFrame(list(itertools.product(df.store.unique(), df.mas_id.unique())),columns=df.columns)
如果您不想包含nan值,只需按如下方式更新它:
result = pd.DataFrame(list(itertools.product(df.store.dropna().unique(), df.mas_id.dropna().unique())),columns=df.columns)
avwztpqn3#
另一种可能的解决方案,基于pandas.merge和how='cross':
pandas.merge
how='cross'
(df.merge(df, how='cross', suffixes=('','2'))[['store2', 'mas_id']] .dropna().rename(columns={'store2': 'store'}) )
另一种可能的解决方案是基于numpy.tile和numpy.repeat:
numpy.tile
numpy.repeat
pd.DataFrame( {'store': np.tile(df.store.dropna(), len(df)), 'mas_id': np.repeat(df.mas_id, len(df.store.dropna())) } )
输出量:
store mas_id 0 100.0 1 0 101.0 1 0 102.0 1 1 100.0 2 1 101.0 2 1 102.0 2 2 100.0 3 2 101.0 3 2 102.0 3 3 100.0 4 3 101.0 4 3 102.0 4
3条答案
按热度按时间mcdcgff01#
使用
itertools
库的函数product
输出量
编辑:
如果要按
mas_id
列进行排序,输出量
bogh5gae2#
您可以将
itertools
的函数product
如果您不想包含nan值,只需按如下方式更新它:
avwztpqn3#
另一种可能的解决方案,基于
pandas.merge
和how='cross'
:另一种可能的解决方案是基于
numpy.tile
和numpy.repeat
:输出量: