Python中基于id填充年份系列

问题描述 投票:0回答:1

我有一个包含国家/地区和年份的数据集。年份按降序排列为 2023 年至 2003 年。然而,对于某些国家/地区来说,2023 年至 2003 年的年份完全缺失。有些国家出现一二三倍。我只想为那些年份完全缺失的国家(即 2023-2003 年)填写年份列,而不是那些仅出现一年、两年或三年的国家。例如,在这个示例数据集中,我想为中国和巴基斯坦填写年份,而不是法国和孟加拉国。

import pandas as pd
data = {'country': ['USA', 'USA', 'USA', 'China', 'China', 'China', 'India', 'India', 'India', 'France', 'Pakistan', 'Pakistan', 'Pakistan', 'Bangladesh'],
'year': [2023, 2022, 2021, '', '', '', 2023, 2022, 2021, '', '', '', '', ''],
'value1': [10, 15, 20, 30, 35, 40, 50, 60, 9, 10, 11, 12, 13, 11],
'value2': [55, 15, 21, 22, 33, 45, 50, 60, 9, 10, 11, 12, 13, 9]

}

df = pd.DataFrame(data)
df

输出应该如下所示 enter image description here

python pandas
1个回答
0
投票

您可以使用

groupby.cumcount
groupby.transform
的组合:

m = df['year'].eq('')
g = m.groupby(df['country'])

df.loc[g.transform('sum').eq(3),
       'year'] = g.cumcount().rsub(2023)

输出:

       country  year  value1  value2
0          USA  2023      10      55
1          USA  2022      15      15
2          USA  2021      20      21
3        China  2023      30      22
4        China  2022      35      33
5        China  2021      40      45
6        India  2023      50      50
7        India  2022      60      60
8        India  2021       9       9
9       France            10      10
10    Pakistan  2023      11      11
11    Pakistan  2022      12      12
12    Pakistan  2021      13      13
13  Bangladesh            11       9
© www.soinside.com 2019 - 2024. All rights reserved.