簡體   English   中英

在 pandas dataframe 列上按上一個組值復制組內的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM