如何在Pandas的不同列列表中追加项目

2024-10-01 09:25:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,看起来像这样:

dic = {'A':['PINCO','PALLO','CAPPO','ALLOP'],
       'B':['KILO','KULO','FIGA','GAGO'],
       'C':[['CAL','GOL','TOA','PIA','STO'],
            ['LOL','DAL','ERS','BUS','TIS'],
            ['PIS','IPS','ZSP','YAS','TUS'],
            []]}
df1 = pd.DataFrame(dic)

我的目标是为每一行插入A的元素,作为C列中包含的列表的第一项。同时,我想将B的元素设置为C中包含的列表的最后一项。在

我通过使用以下代码行实现了我的目标:

^{pr2}$

有没有一种更优雅更有效的方法来实现我的目标,也许是使用一些熊猫的功能?我想尽量避免for循环。在


Tags: 数据元素目标列表calkilodicgol
3条回答

df1.values.tolist()使用列表理解

pd.Series([[r[0]] + r[2] + [r[1]] for r in df1.values.tolist()], df1.index)

0    [PINCO, CAL, GOL, TOA, PIA, STO, KILO]
1    [PALLO, LOL, DAL, ERS, BUS, TIS, KULO]
2    [CAPPO, PIS, IPS, ZSP, YAS, TUS, FIGA]
3                             [ALLOP, GAGO]
dtype: object

时间测试

enter image description here

灵感来自于Ted的解决方案,但没有修改A和{}列:

def tolist(value):
    return [value]

df1.C = df1.A.map(tolist) + df1.C + df1.B.map(tolist)

使用apply,您不会编写显式循环:

^{pr2}$

一个好的一般规则是避免将applyaxis=1一起使用,因为遍历行很费时

可以将A列和B列中的每个元素转换为带有map的列表,然后在行中求和。在

df1['A'] = df1.A.map(lambda x: [x])  
df1['B'] = df1.B.map(lambda x: [x])
df1.sum(1)
CPU times: user 3.07 s, sys: 207 ms, total: 3.27 s

另一种选择是使用apply和axis=1,它在我的计算机上运行速度慢了15倍,在100万行上

^{pr2}$

相关问题 更多 >