如果数据框上的值相等,则在行中追加列

时间:2019-12-05 16:21:14

标签: python pandas

我有两个数据框

df1:

$ g++ -std=c++0x Foo.cpp -o Foo && Foo
All Uniform: Yes
All Uniform: No

和df2:

id  text    top_class   class_name  confidence
66957231351_2019-10-07  demora muito pra abrir  14008   14008   0.4602143298907555
66957231351_2019-10-07  demora muito pra abrir  14008   06003   0.30678383572691853
66957231351_2019-10-07  demora muito pra abrir  14008   05002   0.037590707858130325
66957231351_2019-10-07  demora muito pra abrir  14008   23001   0.02091041755666281
66957231351_2019-10-07  demora muito pra abrir  14008   01002   0.01907102736912508
66957231351_2019-10-07  demora muito pra abrir  14008   23003   0.012796897109324473
66957231351_2019-10-07  demora muito pra abrir  14008   22001   0.01228200915189815
66957231351_2019-10-07  demora muito pra abrir  14008   15002   0.011176991076612896
66954122785_2019-10-02  retirar anuidade    13002   13002   0.6453412791820116
66954122785_2019-10-02  retirar anuidade    13002   13006   0.1100155553542794
66954122785_2019-10-02  retirar anuidade    13002   12001   0.08613744623369846
66954122785_2019-10-02  retirar anuidade    13002   13004   0.024676785852323118
66954122785_2019-10-02  retirar anuidade    13002   06004   0.016872895547706917
66954122785_2019-10-02  retirar anuidade    13002   11003   0.011536940259058345
66954122785_2019-10-02  retirar anuidade    13002   23001   0.011438333185246417

我需要一个df3,每当df2上的列文本等于df1时,列“ top_class”,“ class_name”和“ confidence”将被附加到相应的行,因为您会看到它们具有不同的“ id”值,唯一的共同点是文字

所需的输出:

df 3

                      id                    text
0  10005203764_2019-10-14  demora muito pra abrir
1  66978324904_2019-10-11        retirar anuidade

我尝试了id text top_class class_name confidence 66957231351_2019-10-07 demora muito pra abrir 14008 14008 0.4602143298907555 66957231351_2019-10-07 demora muito pra abrir 14008 06003 0.30678383572691853 66957231351_2019-10-07 demora muito pra abrir 14008 05002 0.037590707858130325 66957231351_2019-10-07 demora muito pra abrir 14008 23001 0.02091041755666281 66957231351_2019-10-07 demora muito pra abrir 14008 01002 0.01907102736912508 66957231351_2019-10-07 demora muito pra abrir 14008 23003 0.012796897109324473 66957231351_2019-10-07 demora muito pra abrir 14008 22001 0.01228200915189815 66957231351_2019-10-07 demora muito pra abrir 14008 15002 0.011176991076612896 66954122785_2019-10-02 retirar anuidade 13002 13002 0.6453412791820116 66954122785_2019-10-02 retirar anuidade 13002 13006 0.1100155553542794 66954122785_2019-10-02 retirar anuidade 13002 12001 0.08613744623369846 66954122785_2019-10-02 retirar anuidade 13002 13004 0.024676785852323118 66954122785_2019-10-02 retirar anuidade 13002 06004 0.016872895547706917 66954122785_2019-10-02 retirar anuidade 13002 11003 0.011536940259058345 66954122785_2019-10-02 retirar anuidade 13002 23001 0.011438333185246417 ##values of df2 with their respectives "top_class" "class_name" and "confidence" took from df1 10005203764_2019-10-14 demora muito pra abrir 14008 14008 0.4602143298907555 10005203764_2019-10-14 demora muito pra abrir 14008 06003 0.30678383572691853 10005203764_2019-10-14 demora muito pra abrir 14008 05002 0.037590707858130325 10005203764_2019-10-14 demora muito pra abrir 14008 23001 0.02091041755666281 10005203764_2019-10-14 demora muito pra abrir 14008 01002 0.01907102736912508 10005203764_2019-10-14 demora muito pra abrir 14008 23003 0.012796897109324473 10005203764_2019-10-14 demora muito pra abrir 14008 22001 0.01228200915189815 10005203764_2019-10-14 demora muito pra abrir 14008 15002 0.011176991076612896 66978324904_2019-10-11 retirar anuidade 13002 13002 0.6453412791820116 66978324904_2019-10-11 retirar anuidade 13002 13006 0.1100155553542794 66978324904_2019-10-11 retirar anuidade 13002 12001 0.08613744623369846 66978324904_2019-10-11 retirar anuidade 13002 13004 0.024676785852323118 66978324904_2019-10-11 retirar anuidade 13002 06004 0.016872895547706917 66978324904_2019-10-11 retirar anuidade 13002 11003 0.011536940259058345 66978324904_2019-10-11 retirar anuidade 13002 23001 0.011438333185246417

但是df2的值会附加到置信权的后面,而不会包含“ top_class”,“ class_name”和“ confidence”

d3 = pd.merge(d1, d2, on='text', how='outer')

在此先感谢,感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

首先发生这种情况是因为当您合并具有整数的列时,合并会丢失数据。 然后:

d2["top_class"] = d2["top_class"].apply(lambda x: str(x))

之所以会发生这种情况,是因为这些列都是整数,请将其转换为字符串,然后再转换为整数或浮点数。

答案 1 :(得分:1)

IIUC,您可以这样做:

pd.concat((df1, 
           df2.merge(df1.drop('id',axis=1), 
                     on='text', how='left')
          ))

输出:

    id                      text                      top_class    class_name    confidence
--  ----------------------  ----------------------  -----------  ------------  ------------
 0  66957231351_2019-10-07  demora muito pra abrir        14008         14008     0.460214
 1  66957231351_2019-10-07  demora muito pra abrir        14008          6003     0.306784
 2  66957231351_2019-10-07  demora muito pra abrir        14008          5002     0.0375907
 3  66957231351_2019-10-07  demora muito pra abrir        14008         23001     0.0209104
 4  66957231351_2019-10-07  demora muito pra abrir        14008          1002     0.019071
 5  66957231351_2019-10-07  demora muito pra abrir        14008         23003     0.0127969
 6  66957231351_2019-10-07  demora muito pra abrir        14008         22001     0.012282
 7  66957231351_2019-10-07  demora muito pra abrir        14008         15002     0.011177
 8  66954122785_2019-10-02  retirar anuidade              13002         13002     0.645341
 9  66954122785_2019-10-02  retirar anuidade              13002         13006     0.110016
10  66954122785_2019-10-02  retirar anuidade              13002         12001     0.0861374
11  66954122785_2019-10-02  retirar anuidade              13002         13004     0.0246768
12  66954122785_2019-10-02  retirar anuidade              13002          6004     0.0168729
13  66954122785_2019-10-02  retirar anuidade              13002         11003     0.0115369
14  66954122785_2019-10-02  retirar anuidade              13002         23001     0.0114383
 0  10005203764_2019-10-14  demora muito pra abrir        14008         14008     0.460214
 1  10005203764_2019-10-14  demora muito pra abrir        14008          6003     0.306784
 2  10005203764_2019-10-14  demora muito pra abrir        14008          5002     0.0375907
 3  10005203764_2019-10-14  demora muito pra abrir        14008         23001     0.0209104
 4  10005203764_2019-10-14  demora muito pra abrir        14008          1002     0.019071
 5  10005203764_2019-10-14  demora muito pra abrir        14008         23003     0.0127969
 6  10005203764_2019-10-14  demora muito pra abrir        14008         22001     0.012282
 7  10005203764_2019-10-14  demora muito pra abrir        14008         15002     0.011177
 8  66978324904_2019-10-11  retirar anuidade              13002         13002     0.645341
 9  66978324904_2019-10-11  retirar anuidade              13002         13006     0.110016
10  66978324904_2019-10-11  retirar anuidade              13002         12001     0.0861374
11  66978324904_2019-10-11  retirar anuidade              13002         13004     0.0246768
12  66978324904_2019-10-11  retirar anuidade              13002          6004     0.0168729
13  66978324904_2019-10-11  retirar anuidade              13002         11003     0.0115369
14  66978324904_2019-10-11  retirar anuidade              13002         23001     0.0114383