假设我得到了一个熊猫数据,最后有两个列,其中包含一个列表(长度为>= 1)。第一个列("mode
")有一个变量,应该附加到所需的标题名称,第二列("res
")包含数据:
>>> df = pd.DataFrame([
{ 'c1': 850, 'c2': 'Ex', 'c3': 300.0, 'c4': 250, 'mode': [0, 1], 'res': [1.525, 1.321] },
{ 'c1': 850, 'c2': 'Ex', 'c3': 300.0, 'c4': 250, 'mode': [0, 1], 'res': [1.526, 1.311] }
])
有结果
c1 c2 c3 c4 mode res
0 850 Ex 300.0 250 [0, 1] [1.525, 1.321]
1 850 Ex 300.0 250 [0, 1] [1.526, 1.311]
是否有更好的方法来拆分dataframe df
以获得所需的结果
c1 c2 c3 c4 res_mode_0 res_mode_1
0 850 Ex 300.0 250 1.525 1.321
1 850 Ex 310.0 250 1.526 1.311
而不是使用循环?
发布于 2022-01-09 11:00:36
您可以尝试以下代码。优点是它可以工作,而不考虑列表中元素的数量。
df = pd.DataFrame([
{ 'c1': 850, 'c2': 'Ex', 'c3': 300.0, 'c4': 250, 'mode': [0, 1], 'res': [1.525, 1.321] },
{ 'c1': 850, 'c2': 'Ex', 'c3': 300.0, 'c4': 250, 'mode': [0, 1], 'res': [1.526, 1.311] }
])
split_df = pd.DataFrame(df["res"].tolist()).add_prefix("res_mode_")
df = pd.concat([df, split_df], axis=1).drop(["mode", "res"], axis=1)
输出:
df
c1 c2 c3 c4 res_mode_0 res_mode_1
0 850 Ex 300.0 250 1.525 1.321
1 850 Ex 300.0 250 1.526 1.311
发布于 2022-01-09 11:02:57
最有效的方法;
pd.concat([pd.DataFrame(df.pop('your_column').values.tolist()), df], axis=1)
不幸的是,您必须在需要展开的每个列上使用此方法。
https://stackoverflow.com/questions/70644487
复制相似问题