我有一个包含国家/地区和年份的数据集。年份按降序排列为 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
您可以使用
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