我有一个包含四列的DataFrame df:DateLocationCategoryValue.对于每个DateLocation,我try 更改列Value中包含另一列Category中具有5或更大值的值的值,并将其替换为具有Category 5的行的值.

df:
Date       Location  Category  Value
20220101   FE        1         0.23
20220101   FE        2         0.24
20220101   FE        3         0.26
20220101   FE        4         0.27
20220101   FE        5         0.28
20220101   FE        6         0.30
20220101   RP        5         0.32
20220101   RP        6         0.35
20220102   FE        1         0.20
20220102   FE        2         0.23
20220102   FE        3         0.25
20220102   FE        4         0.26
20220102   FE        5         0.28
20220102   FE        6         0.32
df_new:
Date       Location  Category  Value
20220101   FE        1         0.23
20220101   FE        2         0.24
20220101   FE        3         0.26
20220101   FE        4         0.27
20220101   FE        5         0.28
20220101   FE        6         0.28 <-- changed with value from row with Category == 5
20220101   RP        5         0.32
20220101   RP        6         0.32 <-- changed with value from row with Category == 5
20220102   FE        1         0.20
20220102   FE        2         0.23
20220102   FE        3         0.25
20220102   FE        4         0.26
20220102   FE        5         0.28
20220102   FE        6         0.28 <-- changed with value from row with Category == 5

到目前为止,我只能提取特定Date中的ValueCategory=5中的Location.

df.loc[(df['Date'] == 20220101) & (df['Location'] == 'FE') & (df['Category'] == 5), 'Value'].iloc[0]

是否有简单而有效的方式来改变列Value中的列值?非常感谢!

对于可再生性:

df = pd.DataFrame({
    'Date':[20220101, 20220101, 20220101, 20220101, 20220101, 20220101, 20220101, 20220101, 20220102, 20220102, 20220102, 20220102, 20220102, 20220102, 20220102, 20220102],
    'Location':['FE', 'FE', 'FE', 'FE', 'FE', 'FE', 'RP', 'RP', 'FE', 'FE', 'FE', 'FE', 'FE', 'FE', 'RP', 'RP'],
    'Category':[1, 2, 3, 4, 5, 6, 5, 6, 1, 2, 3, 4, 5, 6, 5, 6],
    'Value':[0.23, 0.24, 0.26, 0.27, 0.28, 0.3, 0.32, 0.35, 0.2, 0.23, 0.25, 0.26, 0.28, 0.32, 0.34, 0.36]
})

推荐答案

假设每个组的类别按升序排列,则可以将类别>;5和groupby.ffill的值设置为mask:

df['Value'] = (df['Value'].mask(df['Category'].gt(5))
               .groupby([df['Date'], df['Location']])
               .ffill()
              )

输出(作为新列值2进行比较):

        Date Location  Category  Value  Value2
0   20220101       FE         1   0.23    0.23
1   20220101       FE         2   0.24    0.24
2   20220101       FE         3   0.26    0.26
3   20220101       FE         4   0.27    0.27
4   20220101       FE         5   0.28    0.28
5   20220101       FE         6   0.30    0.28
6   20220101       RP         5   0.32    0.32
7   20220101       RP         6   0.35    0.32
8   20220102       FE         1   0.20    0.20
9   20220102       FE         2   0.23    0.23
10  20220102       FE         3   0.25    0.25
11  20220102       FE         4   0.26    0.26
12  20220102       FE         5   0.28    0.28
13  20220102       FE         6   0.32    0.28
14  20220102       RP         5   0.34    0.34
15  20220102       RP         6   0.36    0.34

Python相关问答推荐

如何在两列上groupBy,并使用pyspark计算每个分组列的平均总价值

为什么Python内存中的列表大小与文档不匹配?

使用np.fft.fft2和cv2.dft重现相位谱.为什么结果并不相似呢?

根据过滤后的牛郎星图表中的数据计算新系列

我可以同时更改多个图像吗?

try 在单个WITH_COLUMNS_SEQ操作中链接表达式时,使用Polars数据帧时出现ComputeError

为什么在更新Pandas 2.x中的列时,数据类型不会更改,而在Pandas 1.x中会更改?

是否将列表分割为2?

如何正确设置ALLOWED_HOST以允许网络中的其他计算机访问Web

使用Python下载pdf url

使用极轴 Select 一系列柱

Python:比较日期并批量更新某些字段

JAX效率问题中的多元导数

无法在没有echo的情况下判断macOS上Python中按下的键

极点中的链接表达式不起作用

如何分组并查找新的或正在消失的项目

一种处理Django查询集数据的轻量级方法

Django中带有ForeignKey的抽象模型无法按预期继承

压平JSON后的Pandas 保留柱

游程编码产生错误的结果