Pandas:更快地遍历数据帧并基于操作添加新数据的方法

2024-04-25 04:21:39 发布

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

我想在df1的每一行的2列中查找值,在另一个df2中查找匹配项,并将其粘贴到同一行的df1的新列中并继续

alp=list("ABCDEFGHIJKLMNOPQRTSUVQXYZ")
df1['NewCol'] = (np.random.choice(alp)) #create new col and input random values

for i in range(len(df1['code1'])):
    a = df1['code2'].iloc[i].upper()
    b = df1['code1'].str[-3:].iloc[i]
    df1['NewCol'].iloc[i] = df2.loc[b,a]
df1['code3'] = df1[['code3','NewCol']].max(axis=1)
df1 =df1.drop('NewCol',axis=1)

我的意见如下: df1型:

    code1 code2  code3
0  XXXHYG     a     12
1  XXXTBG     a     23
2  XXXECT     b     34
3  XXXKOL     b     45
4  XXXBTW     c     56

df2型:

    A   B   C   D   E
HYG 33  38  40  41  30
TBG 20  46  41  43  45
ECT 53  42  39  34  45
KOL 45  51  54  47  30
BTW 37  36  49  48  58

所需输出:

    code1 code2  code3
0  XXXHYG     a     33
1  XXXTBG     a     23
2  XXXECT     b     42
3  XXXKOL     b     51
4  XXXBTW     c     56

当我在df1中仅对4200行执行此操作时,仅循环就需要222秒。。一定有办法利用熊猫的力量更快地做到这一点?你知道吗

非常感谢您的时间!你知道吗


Tags: randomdf1df2axisiloccode2code1code3
1条回答
网友
1楼 · 发布于 2024-04-25 04:21:39

如果使用cda3(^}}可以更快地创建一个新的数据帧。他说

df3 = df1.copy()
tups = list(zip(df1['code1'].str[-3:], df1['code2'].str.upper()))
df3['code3'] = df2.stack()[tups].values
print(df3)

输出

    code1 code2  code3
0  XXXHYG     a     33
1  XXXTBG     a     20
2  XXXECT     b     42
3  XXXKOL     b     51
4  XXXBTW     c     49

相关问题 更多 >