如何将元素附加到DataFrame中列表的末尾?

5
假设我有一个列表的DataFrame,
 my_df = pd.DataFrame({'my_list':[[45,12,23],[20,46,78],[45,30,45]]})

以下是其产生的结果:
         my_list
0  [45, 12, 23]
1  [20, 46, 78]
2  [45, 30, 45]

我该如何为每一行添加一个元素,比如说99,到my_list中?

期望结果:

         my_list
0  [45, 12, 23, 99]
1  [20, 46, 78, 99]
2  [45, 30, 45, 99]
2个回答

8
In [90]: my_df['my_list'] += [99]

In [91]: my_df
Out[91]:
            my_list
0  [45, 12, 23, 99]
1  [20, 46, 78, 99]
2  [45, 30, 45, 99]

太简单了。谢谢!我在尝试使用列表的附加函数时迷失了方向。 - G F
@GF,很高兴我能帮到你 :) - MaxU - stand with Ukraine

5
听起来非常无聊,但直接迭代值 - 这样您可以调用append并避免使用+=时发生的任何重新绑定,从而使事情显着加快。
for val in my_df.my_list:
    val.append(99)

演示

>>> import timeit
>>> setup = '''
import pandas as pd; import numpy as np
df = pd.DataFrame({'my_list': np.random.randint(0, 100, (500, 500)).tolist()})
'''

>>> min(timeit.Timer('for val in df.my_list: val.append(90)', 
                     setup=setup).repeat(10, 1000))
0.05669815401779488

>>> min(timeit.Timer('df.my_list += [90]', 
                     setup=setup).repeat(10, 1000))
2.7741127769695595

当然,如果速度对你很重要(即使不是),你应该考虑是否真的需要在DataFrame中嵌套列表。在需要Pandas工具之前,可以考虑使用NumPy数组进行操作,然后执行类似以下操作:
np.c_[arr, np.full(arr.shape[0], 90)]

或者至少在DataFrame中将列表拆分为单独的列,并分配一个新列。

@GF 没问题,请看我的编辑,里面有更多的信息。 - miradulo
如果要添加的值来自另一列,应该如何处理?例如,像df['to_add'] = 99这样。 - G F
@GF 是的,就是这样。但是如果你有不需要Pandas功能的数值数据,请使用NumPy数组,直到必须使用Pandas功能为止。 - miradulo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接