【问题标题】:Access a list within an element of a Pandas DataFrame访问 Pandas DataFrame 元素中的列表
【发布时间】:2016-10-31 12:02:25
【问题描述】:

我有一个 Pandas DataFrame,它在其中一列中有一个整数列表。我想访问此列表中的各个元素。我找到了一种方法,方法是使用tolist() 并将其转回DataFrame,但我想知道是否有更简单/更好的方法。在此示例中,我将 Column A 添加到 Column B 中列表的中间元素。

import pandas as pd
df = pd.DataFrame({'A' : (1,2,3), 'B': ([0,1,2],[3,4,5,],[6,7,8])})
df['C'] = df['A'] + pd.DataFrame(df['B'].tolist())[1]
df

有没有更好的方法来做到这一点?

【问题讨论】:

    标签: python list pandas indexing dataframe


    【解决方案1】:

    您也可以简单地尝试以下方法:

    df['C'] = df['A'] + df['B'].str[1]
    

    此方法的性能:

    %timeit df['C'] = df['A'] + df['B'].str[1]
    #1000 loops, best of 3: 445 µs per loop
    

    【讨论】:

      【解决方案2】:

      一种选择是使用apply,它应该比从中创建数据框更快:

      df['C'] = df['A'] + df.apply(lambda row: row['B'][1], axis = 1) 
      

      一些速度测试:

      %timeit df['C'] = df['A'] + pd.DataFrame(df['B'].tolist())[1]
      # 1000 loops, best of 3: 567 µs per loop
      %timeit df['C'] = df['A'] + df.apply(lambda row: row['B'][1], axis = 1) 
      # 1000 loops, best of 3: 406 µs per loop
      %timeit df['C'] = df['A'] + df['B'].apply(lambda x:x[1])
      # 1000 loops, best of 3: 250 µs per loop
      

      好的。稍微好一些。 @breucopter 的回答是最快的。

      【讨论】:

      • 谢谢。非常感谢!
      【解决方案3】:

      更直接一点的是:

      df['C'] = df['A'] + df['B'].apply(lambda x:x[1])
      

      【讨论】:

      • 感谢闪电般的快速回答!
      猜你喜欢
      • 1970-01-01
      • 2018-09-02
      • 2021-09-14
      • 2015-12-13
      • 2017-01-26
      • 2022-11-29
      • 1970-01-01
      相关资源
      最近更新 更多