Python pandas基于列值的条件替换字符串

2024-04-25 13:18:16 发布

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

鉴于这些数据帧…:

DF = pd.DataFrame({'COL1': ['A', 'B', 'C', 'D','D','D'], 
                   'COL2': [11032, 1960, 11400, 11355, 8, 7], 
                   'year': ['2016', '2017', '2018', '2019', '2020', '2021']})
DF

   COL1 COL2    year
0   A   11032   2016
1   B   1960    2017
2   C   11400   2018
3   D   11355   2019
4   D   8       2020
5   D   7       2021

DF2 = pd.DataFrame({'ColX': ['D'], 'ColY':['2021'], 'ColZ':[100]
DF2
        ColX   ColY    ColZ
   0     D      2021   100

如果满足以下条件:

COL1=来自DF2的ColX

年份=来自DF2的ColY

然后将COL2中的值从DF2更改为ColZ。在


Tags: 数据dataframedf条件yearcol2col1pd
1条回答
网友
1楼 · 发布于 2024-04-25 13:18:16

这看起来像是您想要updateDF,其中的数据来自DF2。在

假设DF2中的所有值对于ColXColY中的给定值对是唯一的:

DF = DF.merge(DF2.set_index(['ColX', 'ColY'])[['ColZ']], 
              how='left', 
              left_on=['COL1', 'year'], 
              right_index=True)
DF.COL2.update(DF.ColZ)
del DF['ColZ']

>>> DF
  COL1   COL2  year
0    A  11032  2016
1    B   1960  2017
2    C  11400  2018
3    D  11355  2019
4    D      8  2020
5    D    100  2021

我将一个临时数据帧(DF2.set_index(['ColX', 'ColY'])[['ColZ']])合并到DF中,它将ColZ中的所有值相加,其中它的索引(ColX和{})与COL1和{}中的值相匹配。所有不匹配的值都用NA填充。在

然后我使用update从中的非空值重写DF.COL2中的值DF.ColZ公司. 在

然后我删除DF['ColZ']进行清理。在

如果ColZDF中的现有列名匹配,则需要进行一些调整。在

另一种解决方案如下:

^{pr2}$

输出与上述相同。在

相关问题 更多 >