如何从前一组的最后一行分配值到下一组?



目标是将前一个字母组最后一行的数字放到新列"last_digit_prev_group"中。期望的、正确的值,作为结果公式,是由我在col_ok&quot列中手动输入的。我停止了shift()的尝试,但效果与我预期的相差甚远。也许还有别的办法?请原谅我的帖子前后矛盾,我不是IT专家,也不懂英语。提前感谢您的支持。

df = pd.read_csv('C:/Users/.../a.csv',names=['group_letter', 'digit', 'col_ok'] ,
          index_col=0,)

df['last_digit_prev_group'] = df.groupby('group_letter')['digit'].shift(1)
print(df)
group_letter digit col_ok  last_digit_prev_group

A                 1      n                    NaN
A                 3      n                    1.0
A                 2      n                    3.0
A                 5      n                    2.0
A                 1      n                    5.0
B                 1      1                    NaN
B                 2      1                    1.0
B                 1      1                    2.0
B                 1      1                    1.0
B                 3      1                    1.0
C                 5      3                    NaN
C                 6      3                    5.0
C                 1      3                    6.0
C                 2      3                    1.0
C                 3      3                    2.0
D                 4      3                    NaN
D                 3      3                    4.0
D                 2      3                    3.0
D                 5      3                    2.0
D                 7      3                    5.0

Series.maskDataFrame.duplicateddigit的末值,然后用Series.shiftffill作末值:

df['last_digit_prev_group'] = (df['digit'].mask(df.duplicated('group_letter', keep='last'))
.shift()
.ffill())
print (df)
group_letter  digit col_ok  last_digit_prev_group
0             A      1      n                    NaN
1             A      3      n                    NaN
2             A      2      n                    NaN
3             A      5      n                    NaN
4             A      1      n                    NaN
5             B      1      1                    1.0
6             B      2      1                    1.0
7             B      1      1                    1.0
8             B      1      1                    1.0
9             B      3      1                    1.0
10            C      5      3                    3.0
11            C      6      3                    3.0
12            C      1      3                    3.0
13            C      2      3                    3.0
14            C      3      3                    3.0
15            D      4      3                    3.0
16            D      3      3                    3.0
17            D      2      3                    3.0
18            D      5      3                    3.0
19            D      7      3                    3.0

如果可能,最后一个值是NaN:

df['last_digit_prev_group'] = (df['digit'].mask(df.duplicated('group_letter', keep='last'))
.shift()
.groupby(df['group_letter']).ffill()
print (df)
group_letter  digit col_ok  last_digit_prev_group
0             A    1.0      n                    NaN
1             A    3.0      n                    NaN
2             A    2.0      n                    NaN
3             A    5.0      n                    NaN
4             A    1.0      n                    NaN
5             B    1.0      1                    1.0
6             B    2.0      1                    1.0
7             B    1.0      1                    1.0
8             B    1.0      1                    1.0
9             B    3.0      1                    1.0
10            C    5.0      3                    3.0
11            C    6.0      3                    3.0
12            C    1.0      3                    3.0
13            C    2.0      3                    3.0
14            C    NaN      3                    3.0
15            D    4.0      3                    NaN
16            D    3.0      3                    NaN
17            D    2.0      3                    NaN
18            D    5.0      3                    NaN
19            D    7.0      3                    NaN

相关内容

  • 没有找到相关文章

最新更新