[英]replcae values within a group on pandas dataframe column by previous group value
我有一個 dataframe:
country group A B C D
0 1 a1 10 20 30 40
1 1 a1 11 21 31 41
2 1 a1 12 22 32 42
3 2 a2 50 60 70 80
4 2 a2 51 61 71 81
5 2 a2 52 62 72 82
6 2 a2 53 63 73 83
7 2 a2 50 60 70 80
8 3 a3 51 61 71 81
9 3 a3 52 62 72 82
10 3 a3 53 63 73 83
11 3 a3 53 63 73 83
我的目標是有一個 dataframe 如下:
country group A B C D
0 1 NAN 10 20 30 40
1 1 NAN 11 21 31 41
2 1 NAN 12 22 32 42
3 2 a1 50 60 70 80
4 2 a1 51 61 71 81
5 2 a1 52 62 72 82
6 2 a1 53 63 73 83
7 2 a1 50 60 70 80
8 3 a2 51 61 71 81
9 3 a2 52 62 72 82
10 3 a2 53 63 73 83
11 3 a2 53 63 73 83
我在哪里獲得列組上前一組的值並將其轉移到下一組
您可以使用映射系列:
s = df.set_index('country')['group'].drop_duplicates()
df['group'] = df['country'].map(s.shift())
output:
country group A B C D
0 1 NaN 10 20 30 40
1 1 NaN 11 21 31 41
2 1 NaN 12 22 32 42
3 2 a1 50 60 70 80
4 2 a1 51 61 71 81
5 2 a1 52 62 72 82
6 2 a1 53 63 73 83
7 2 a1 50 60 70 80
8 3 a2 51 61 71 81
9 3 a2 52 62 72 82
10 3 a2 53 63 73 83
11 3 a2 53 63 73 83
映射系列s
:
country
1 a1
2 a2
3 a3
Name: group, dtype: object
將Series.shift
值與原列的 comapre 一起使用,然后向前填充缺失值:
s = df['group'].shift()
df['group'] = s.where(s.ne(df['group'])).ffill()
print (df)
country group A B C D
0 1 NaN 10 20 30 40
1 1 NaN 11 21 31 41
2 1 NaN 12 22 32 42
3 2 a1 50 60 70 80
4 2 a1 51 61 71 81
5 2 a1 52 62 72 82
6 2 a1 53 63 73 83
7 2 a1 50 60 70 80
8 3 a2 51 61 71 81
9 3 a2 52 62 72 82
10 3 a2 53 63 73 83
11 3 a2 53 63 73 83
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.