【问题标题】:How to merge each row of dataframe into a list in python如何将每一行数据框合并到python中的列表中
【发布时间】:2019-11-29 21:35:37
【问题描述】:

我在 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]

如何有效地转换它?

【问题讨论】:

    标签: python pandas list dataframe


    【解决方案1】:

    这里有一些建议。

    列表和分配

    # 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]
    

    zippop 使用列表理解

    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 破坏性地删除列,因此您只需一步即可分配和清理。

    【讨论】:

      猜你喜欢
      • 2017-10-21
      • 2019-01-07
      • 2013-04-13
      • 2018-11-19
      • 2023-02-18
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 2015-04-18
      相关资源
      最近更新 更多