我希望在某一列(例如列_x)将列表扩展到多行。
所以,
然而,我有很多列。是否有一种简洁而优雅的解决方案可以重复整个数据框,而不需要再次指定每一列?
所以,
df = pd.DataFrame({'column_a': ['a_1', 'a_2'],
'column_b': ['b_1', 'b_2'],
'column_x': [['c_1', 'c_2'], ['d_1', 'd_2']]
})
将被转换为
column_a column_b column_x
0 a_1 b_1 [c_1, c_2]
1 a_2 b_2 [d_1, d_2]
to
column_a column_b column_x
0 a_1 b_1 c_1
1 a_1 b_1 c_2
2 a_2 b_2 d_1
3 a_2 b_2 d_2
迄今为止,我写的代码正是这样做的,并且它可以快速地运行。
lens = [len(item) for item in df['column_x']]
pd.DataFrame( {"column_a" : np.repeat(df['column_a'].values, lens),
"column_b" : np.repeat(df['column_b'].values, lens),
"column_x" : np.concatenate(df['column_x'].values)})
然而,我有很多列。是否有一种简洁而优雅的解决方案可以重复整个数据框,而不需要再次指定每一列?
df = pd.DataFrame({'column_a': [1, 2], 'column_b': ['b_1', 'b_2'], 'column_x': [['c_1', 'c_2'], ['d_1', 'd_2']]})
,那么两个解决方案会得到不同的输出 - 通过print(df1.dtypes)
与print(df.dtypes)
进行检查。这里的主要问题是numpy将所有dtypes转换为相同的类型,因此更通用的解决方案是重复索引,并且如果所有列的dtypes相同,则也可以使用“coldspeed”解决方案。这取决于数据。 - jezrael