Pandas在升序索引中搜索并匹配某个列值

时间:2017-11-06 09:45:11

标签: pandas

我有一个包含数千行的DF。专栏' col1'重复从1到6.列'值'是唯一的数字:

diction = {'col1': [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6], 'target': [34, 65, 23, 65, 12, 87, 36, 51, 26, 74, 34, 87]}
df1 = pd.DataFrame(diction, index = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])

   col1 target
0   1   34
1   2   65
2   3   23
3   4   65
4   5   12
5   6   87
6   1   36
7   2   51
8   3   26
9   4   74
10  5   34
11  6   87

我试图创建一个匹配col1值的新列(让它称之为previous_col)(让我们说COL1值2与TARGET列值 - > 65)所以下次值为2的COL1表示与col1值1:

在同一行中的上一个TARGET值
    col1  previous_col  target
0   1       0           34
1   2       0           65
2   3       0           23
3   4       0           65
4   5       0           12
5   6       0           87
6   1       34          36
7   2       65          51
8   3       23          26
9   4       65          74
10  5       12          34
11  6       87          79

请注意,前6列的前6行为0,因此不存在先前的目标值:D 这里棘手的部分是我需要通过DF索引升序或第一个满足COL1值升序来提取先前的目标。因此,如果我们有一个10k行的DF,不仅要匹配顶部或中间相同的COL1值,还要获取TARGET值。 PREVIOUS_COL中的每个值都应该升序为索引和COL1匹配值。我知道我可以用shift来做,但有时COL1缺少顺序而不是1到6严格,所以我需要完全匹配COL1值。

1 个答案:

答案 0 :(得分:1)

df1['Per_col']=df1.groupby('col1').target.shift(1).fillna(0)
df1
Out[1117]: 
    col1  target  Per_col
0      1      34      0.0
1      2      65      0.0
2      3      23      0.0
3      4      65      0.0
4      5      12      0.0
5      6      87      0.0
6      1      36     34.0
7      2      51     65.0
8      3      26     23.0
9      4      74     65.0
10     5      34     12.0
11     6      87     87.0