Pandas列表的列,通过迭代(选择)三列的每个列表元素作为新列和行来创建多列[重复]

Posted

技术标签:

【中文标题】Pandas列表的列,通过迭代(选择)三列的每个列表元素作为新列和行来创建多列[重复]【英文标题】:Pandas columns of lists, create multiple columns by iterate (select) each list element of three columns as new columns and rows [duplicate] 【发布时间】:2021-05-04 15:15:40 【问题描述】:

我有一个五列的数据框,其中三列包含多个值的列表,它们是(“Long”,“Lat”,Time_stamp“)。请注意,所有(“Long”,“Lat”,Time_stamp“ ) 列作为对象数据类型。 我不想在一个单元格中存储多个值,而是将三列的这些值拆分为新的三列,其中包括每个列表元素,以便这些列表中的每个项目都有自己的行(在所有其他列中具有相同的值列(索引和car_id)。所以我正在寻找的输出如下:

index car_id Long Lat Time_stamp
0 8919 108.99553 34.27859 1539041301
0 8919 108.99552 34.27822 1539041304
0 8919 108.99552 34.27786 1539041307
0 8919 108.99552 34.27748 1539041310
1 19785 108.9665 34.20515 1539014039
1 19785 108.9665 34.20543 1539014042
1 19785 108.9665 34.20572 1539014046
1 19785 108.9665 34.20602 1539014049

等等.....

感谢您的帮助......

【问题讨论】:

试试pd.concat([df[col].explode() for col in df.columns],axis=1) 是的,感谢您的帮助,这是解决问题的好方法。非常感谢。 @anky 【参考方案1】:

假设

以下代码假定只需要对固定数量的列进行规范化。

实施

import pandas as pd

df = pd.DataFrame('car_id': [[1], [2]], 'longitudes': [[108.99553, 108.99552], [108.9665]], 'latitudes': [[34.27859, 34.27822, 34.27786], [34.20543, 34.20572]])

print(df)

pd.DataFrame([car_id, longitude, latitude] for car_id, longitudes, latitudes in df.values for car_id in car_id for longitude in longitudes for latitude in latitudes)

【讨论】:

【参考方案2】:

如果列中的值在列表中,您可以使用explode 将列表中的每个值分配到自己的行中。

请尝试

              df2.explode('Long').explode('Lat').explode('Time_stamp')

【讨论】:

以上是关于Pandas列表的列,通过迭代(选择)三列的每个列表元素作为新列和行来创建多列[重复]的主要内容,如果未能解决你的问题,请参考以下文章

pandas练习题

Pandas FutureWarning:字符的列迭代将在未来版本中被弃用

Pandas - 索引操作

Pandas:将依赖于第三列的相同数据框的两列相乘

两行三列的矩阵和三行三列的矩阵相乘

如果存在于列表中,则根据另一列的值选择列