首页 > 解决方案 > 如何将每一行数据框合并到python中的列表中

问题描述

我在python中有一个数据框

import pandas as pd
d = {'name':['a','b','c','d','e'],'location1': [1, 2,3,8,6], 'location2': 
[2,1,4,6,8]}
df = pd.DataFrame(data=d)

df如下:

    name   location1  location2
0    a          1          2
1    b          2          1
2    c          3          4
3    d          8          6
4    e          6          8

我尝试获取一个数据框:

    name    loc
0    a     [1, 2]
1    b     [2, 1]
2    c     [3, 4]
3    d     [8, 6]
4    e     [6, 8]

如何有效地转换它?

标签: pythonpandaslistdataframe

解决方案


这里有一些建议。

列名和分配

# pandas >= 0.24
df['loc'] = df[['location1', 'location2']].to_numpy().tolist()
# pandas < 0.24
df['loc'] = df[['location1', 'location2']].values.tolist()
df

  name  location1  location2     loc
0    a          1          2  [1, 2]
1    b          2          1  [2, 1]
2    c          3          4  [3, 4]
3    d          8          6  [8, 6]
4    e          6          8  [6, 8]

使用 删除列drop

(df.drop(['location1', 'location2'], 1)
   .assign(loc=df[['location1', 'location2']].to_numpy().tolist()))

  name     loc
0    a  [1, 2]
1    b  [2, 1]
2    c  [3, 4]
3    d  [8, 6]
4    e  [6, 8]

zip使用pop列表理解

df['loc'] = [[x, y] for x, y in zip(df.pop('location1'), df.pop('location2'))]
# or 
df['loc'] = [*map(list, zip(df.pop('location1'), df.pop('location2')))]
df
  name     loc
0    a  [1, 2]
1    b  [2, 1]
2    c  [3, 4]
3    d  [8, 6]
4    e  [6, 8]

pop破坏性地删除列,因此您可以在一个步骤中进行分配和清理。


推荐阅读