我正在自动化一个大型Excel过程,我不知道如何在过滤了两行时根据另一行更改行的值。我创建了一个示例数据框架来演示这个问题。
data = {'Category': ['WC', 'WC', 'GL', 'WC', 'WC', 'WC', 'WC'],
'Year': [2024, 2023, 2022, 2023, 2024, 2021, 2022],
'Type': ['Direct', 'QS', 'Direct', 'Direct', 'QS', 'Direct', 'Direct'],
'Code': [1450, 1450, 2000, 1450, 1450, 1500, 1450],
'Total': [9, 3, 5, 7, 2, 4, 6]}
df = pd.DataFrame(data)
字符串
创建如下所示的数据框:
Category Year Type Code Total
0 WC 2024 Direct 1450 9
1 WC 2023 QS 1450 3
2 GL 2022 Direct 2000 5
3 WC 2023 Direct 1450 7
4 WC 2024 QS 1450 2
5 WC 2021 Direct 1500 4
6 WC 2022 Direct 1450 6
型
我想要改变的是,我希望直接行中的总值是相应年份QS中总列值的两倍,同时在下面代码中的过滤器上过滤。所以,新的数据框看起来像这样:
Category Year Type Code Total
0 WC 2024 Direct 1450 4
1 WC 2023 QS 1450 3
2 GL 2022 Direct 2000 5
3 WC 2023 Direct 1450 6
4 WC 2024 QS 1450 2
5 WC 2023 Direct 1500 4
6 WC 2022 Direct 1450 6
型
为了实现这个结果,我尝试使用以下代码:
WCdf = df[(df.Category == 'WC') & (df.Year > 2022) & (df.Code == 1450) & (df.Type == 'QS')]
df.loc[(df['Code'] == 1450) & (df['Category'] == 'WC') & (df['Year'] > 2022) & (df['Type'] == 'Direct'), 'Total'] = 2 * WCdf.Total
型
WCdf中确实有正确的行,但是当我使用这段代码时,它只是将我想要更改的值转换为NaN。鉴于种种限制,我不太确定如何达到我所期待的结果。我想在这种情况下我可能不能使用.loc函数,但我不确定我会使用什么来代替。
1条答案
按热度按时间toiithl61#
您可以尝试:
字符串
图纸:
型
编辑:附加条件:
型