我有以下dataframe:
import pandas as pd
import random
# Create the lists for each column
nrows = 5
a = [[random.randint(0, 10), random.randint(0, 10), random.randint(0, 10)] for i in range(nrows)]
b = [[random.randint(0, 10), random.randint(0, 10), random.randint(0, 10)] for i in range(nrows)]
c = [[random.randint(0, 10), random.randint(0, 10), random.randint(0, 10)] for i in range(nrows)]
idx = [random.randint(0, 3) for i in range(nrows)]
# Create the pandas dataframe
df = pd.DataFrame({'a': a, 'b': b, 'c': c, 'idx': idx})
我想再创建3列a_des
、b_des
、c_des
,方法是为每一行提取对应于该行idx
值的a
、b
、c
值。(代码重复),需要更新的列越多,需要重复的代码就越多。是否可以用一条apply
语句生成所有三列a_des
、b_des
、c_des
?
EDIT:抱歉,我犯了一个错误,列表的长度不一样,我今天没有时间来解决这个问题,但我明天一定会解决的。
5条答案
按热度按时间tcomlyy61#
IIUC,你可以使用
assign
和 dict/listcomp & * unpacking *:输出:
m528fe3b2#
我会说
结果:
同样值得注意的是,如果你有一个3D numpy数组,你可以用向量的方式来做这件事,你可以考虑。
3df52oht3#
您可以编写一个函数,返回
idx
对应的值,然后使用apply()
:df
:oknwwptz4#
如果所有列表的长度都相同,请使用3D numpy数组:
输出:
w1e3prcc5#
对于不同长度的列表:
输出:
IIUC,可以使用
explode
:一步一步:
您可以使用
pd.concat
合并df
和out
: