我有一个包含数千行的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值。
答案 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