Skip to main content
 首页 » 编程设计

python之将 2 个 Pandas 列表填充列连接成 1 个大列表

2025年05月04日19kuangbin

我有一个如下所示的 Pandas DataFrame:

     NAME      total           total_temp 
ID                                       
1     CVS     [abc1]       [cba, xyzzy01] 
2  Costco     [bcd2, 22]   [dcb, xyzzy02] 
3   Apple     [cde3]       [edc, xyzzy03] 

我想添加创建一个新列 total_temp_2 以便数据如下所示:

     NAME      total       total_temp                   total_temp_2 
ID                                                   
1     CVS     [abc1]       [cba, xyzzy01]       [abc1, cba, xyzzy01] 
2  Costco     [bcd2, 22]   [dcb, xyzzy02]   [bcd2, 22, dcb, xyzzy02] 
3   Apple     [cde3]       [edc, xyzzy03]       [cde3, edc, xyzzy03] 

我觉得我可以通过非常低效的方式来猜测我的方式来连接列表,但我怀疑我遗漏了一些我不了解 Pandas 的东西。

如何使用 pandas 实现此操作?

请您参考如下方法:

处理混合类型时,I usually recommend using something like a list comprehension它具有最小的内存和性能开销。

df['total_temp_2'] = [x + y for x, y in zip(df['total'], df['total_temp'])] 
df 
 
      NAME       total      total_temp              total_temp_2 
ID                                                               
1      CVS      [abc1]  [cba, xyzzy01]      [abc1, cba, xyzzy01] 
2   Costco  [bcd2, 22]  [dcb, xyzzy02]  [bcd2, 22, dcb, xyzzy02] 
3    Apple      [cde3]  [edc, xyzzy03]      [cde3, edc, xyzzy03] 

如果这些是字符串列,您可以使用 ast.literal_eval 来解析它们:

import ast 
 
c = df.select_dtypes(include=[object]).columns 
df[c] = df[c].applymap(ast.literal_eval) 

如果上述解决方案抛出 ValueError: malformed node or string:,请尝试使用 yaml而是打包。

import yaml 
df = df.applymap(yaml.load) 

有趣的是,简单的加法对我来说适用于 0.24。

df['total'] + df['total_temp'] 
 
ID 
1        [abc1, cba, xyzzy01] 
2    [bcd2, 22, dcb, xyzzy02] 
3        [cde3, edc, xyzzy03] 
dtype: object 

这些也行,

df['total'].add(df['total_temp']) 
 
ID 
1        [abc1, cba, xyzzy01] 
2    [bcd2, 22, dcb, xyzzy02] 
3        [cde3, edc, xyzzy03] 
dtype: object 

df['total_temp'].radd(df['total']) 
 
ID 
1        [abc1, cba, xyzzy01] 
2    [bcd2, 22, dcb, xyzzy02] 
3        [cde3, edc, xyzzy03] 
dtype: object 

这些在简单性方面很棒,但由于混合类型的操作更难矢量化,因此本质上是循环的。