pandas 从df中删除后缀,如果它不存在于另一个

flseospp  于 2023-06-28  发布在  其他
关注(0)|答案(2)|浏览(112)

我有两个dataframes:

MD Uniformity TD Uniformity  el_batch
0      0.007474      0.021731    PC-322
1      0.009175      0.022445    PC-328
2      0.013531      0.022607  PC-332-A
3      0.007609      0.025613  PC-332-B
4      0.013437      0.019079    PC-333
5       0.01541           NaN    PC-336
6      0.017017      0.020861    PC-337
7      0.014641      0.020523  PC-339-B
8      0.009083       0.03093    PC-340
9      0.010896      0.014948    PC-341

    el_batch  fraction_load  quantity  fraction_max  fraction_min
0   PC-322-A         22.964        99        1400.5        1370.5
1   PC-322-A         23.501       852        1430.6        1400.6
2   PC-322-A         23.321       115        1410.5        1400.5
3   PC-322-A         23.501       114        1420.6        1410.6
4   PC-322-A         23.681        68        1430.7        1420.7
5     PC-328         24.037       527        1460.7        1430.7
6     PC-328         23.501       411        1430.6        1400.6
7   PC-332-A         24.037       178        1460.7        1430.7
8   PC-332-A         22.964        57        1400.5        1370.5
9   PC-332-A         23.501      1676        1430.6        1400.6
10  PC-332-A         22.964       157        1400.5        1370.5
11  PC-332-A         23.501       175        1430.6        1400.6
12  PC-332-A         23.501       981        1430.6        1400.6
13  PC-333-A         23.501      4186        1430.6        1400.6
14    PC-336         27.795       309        1671.4        1641.4
15    PC-336         27.258       194        1641.3        1611.3
16  PC-337-A         24.037        22        1460.7        1430.7
17  PC-337-A         24.574       142        1490.8        1460.8
18    PC-341         25.111       620        1520.9        1490.9
19    PC-344         24.037        57        1460.7        1430.7
20    PC-344         23.501       552        1430.6        1400.6
21  PC-339-B         24.037       240        1460.7        1430.7
22  PC-339-B         23.501       612        1430.6        1400.6
23    PC-340         22.964       463        1400.5        1370.5
24    PC-340         23.501       636        1430.6        1400.6

我想删除第二个df中el_batch列的后缀,如果它在第一个df中不存在的话。例如,PC-322应该在第二个df中没有A后缀,注意后缀可以是任何大写字母。有什么想法吗
谢谢

0x6upsns

0x6upsns1#

您可以用途:

m = df2["el_batch"].isin(df1["el_batch"])

no_suffix = df2["el_batch"].str.extract(r"(.+\d+)(?:-[A-Z])?", expand=False)

df2["el_batch"] = df2["el_batch"].where(m, no_suffix)

输出:

print(df2)

    el_batch  fraction_load  quantity  fraction_max  fraction_min
0     PC-322          22.96        99       1400.50       1370.50
1     PC-322          23.50       852       1430.60       1400.60
2     PC-322          23.32       115       1410.50       1400.50
3     PC-322          23.50       114       1420.60       1410.60
4     PC-322          23.68        68       1430.70       1420.70
5     PC-328          24.04       527       1460.70       1430.70
6     PC-328          23.50       411       1430.60       1400.60
7   PC-332-A          24.04       178       1460.70       1430.70
8   PC-332-A          22.96        57       1400.50       1370.50
9   PC-332-A          23.50      1676       1430.60       1400.60
10  PC-332-A          22.96       157       1400.50       1370.50
11  PC-332-A          23.50       175       1430.60       1400.60
12  PC-332-A          23.50       981       1430.60       1400.60
13    PC-333          23.50      4186       1430.60       1400.60
14    PC-336          27.80       309       1671.40       1641.40
15    PC-336          27.26       194       1641.30       1611.30
16    PC-337          24.04        22       1460.70       1430.70
17    PC-337          24.57       142       1490.80       1460.80
18    PC-341          25.11       620       1520.90       1490.90
19    PC-344          24.04        57       1460.70       1430.70
20    PC-344          23.50       552       1430.60       1400.60
21  PC-339-B          24.04       240       1460.70       1430.70
22  PC-339-B          23.50       612       1430.60       1400.60
23    PC-340          22.96       463       1400.50       1370.50
24    PC-340          23.50       636       1430.60       1400.60
mepcadol

mepcadol2#

@Timeless解决方案可以简化为单个extract,而无需强制执行批处理的格式。如果该值存在于df1中,那么我们就使用它:

import re

pattern = f"^({'|'.join(map(re.escape, df1['el_batch']))})"

df2['el_batch'] = (df2['el_batch'].str.extract(pattern, expand=False)
                   .fillna(df2['el_batch'])
                   )

输出:

el_batch  fraction_load  quantity  fraction_max  fraction_min
0     PC-322         22.964        99        1400.5        1370.5
1     PC-322         23.501       852        1430.6        1400.6
2     PC-322         23.321       115        1410.5        1400.5
3     PC-322         23.501       114        1420.6        1410.6
4     PC-322         23.681        68        1430.7        1420.7
5     PC-328         24.037       527        1460.7        1430.7
6     PC-328         23.501       411        1430.6        1400.6
7   PC-332-A         24.037       178        1460.7        1430.7
8   PC-332-A         22.964        57        1400.5        1370.5
9   PC-332-A         23.501      1676        1430.6        1400.6
10  PC-332-A         22.964       157        1400.5        1370.5
11  PC-332-A         23.501       175        1430.6        1400.6
12  PC-332-A         23.501       981        1430.6        1400.6
13    PC-333         23.501      4186        1430.6        1400.6
14    PC-336         27.795       309        1671.4        1641.4
15    PC-336         27.258       194        1641.3        1611.3
16    PC-337         24.037        22        1460.7        1430.7
17    PC-337         24.574       142        1490.8        1460.8
18    PC-341         25.111       620        1520.9        1490.9
19    PC-344         24.037        57        1460.7        1430.7
20    PC-344         23.501       552        1430.6        1400.6
21  PC-339-B         24.037       240        1460.7        1430.7
22  PC-339-B         23.501       612        1430.6        1400.6
23    PC-340         22.964       463        1400.5        1370.5
24    PC-340         23.501       636        1430.6        1400.6

相关问题