今日も同様の質問をしましたが、グループでの適用は簡単だと思いましたが、思ったより難しいと思います。
だから、これが私のDataFrameだとしましょう:
group a b
0 0 'a' 3
1 0 'a' 56
2 0 'b' 7
3 0 'b' 80
4 0 'b' 55
5 0 'f' 601
6 0 'f' -4
7 0 'g' 33
8 0 'g' 22
9 1 'a' 3
10 1 'a' 56
11 1 'b' 7
12 1 'b' 80
13 1 'b' 55
14 1 'f' 601
15 1 'f' -4
16 1 'g' 33
17 1 'g' 22
私は新しい列、作成したいc
値が最後の値になり、b
以前の値でa
、同じグループ内での出力が可能必要がありますので、:
group a b c
0 0 'a' 3 nan
1 0 'a' 56 nan
2 0 'b' 7 56
3 0 'b' 80 56
4 0 'b' 55 56
5 0 'f' 601 55
6 0 'f' -4 55
7 0 'g' 33 -4
8 0 'g' 22 -4
9 1 'a' 3 nan
10 1 'a' 56 nan
11 1 'b' 7 56
12 1 'b' 80 56
13 1 'b' 55 56
14 1 'f' 601 55
15 1 'f' -4 55
16 1 'g' 33 -4
17 1 'g' 22 -4
どんな助けでも大歓迎です!
これは、データに重複したインデックスがない場合に機能します。
groups = df.groupby('group')
df['c'] = df.loc[df['a']!=groups['a'].shift(-1),'b']
df['c'] = groups['c'].ffill()
df['c'] = groups['c'].shift()
出力:
group a b c
0 0 'a' 3 NaN
1 0 'a' 56 NaN
2 0 'b' 7 56.0
3 0 'b' 80 56.0
4 0 'b' 55 56.0
5 0 'f' 601 55.0
6 0 'f' -4 55.0
7 0 'g' 33 -4.0
8 0 'g' 22 -4.0
9 1 'a' 3 NaN
10 1 'a' 56 NaN
11 1 'b' 7 56.0
12 1 'b' 80 56.0
13 1 'b' 55 56.0
14 1 'f' 601 55.0
15 1 'f' -4 55.0
16 1 'g' 33 -4.0
17 1 'g' 22 -4.0
サンプルに示されているように、データに重複したインデックスがある場合は、次のことができます。
# save the index
idx = df.index
# remove the index
df = df.reset_index(drop=True)
groups = df.groupby('group')
df['c'] = df.loc[df['a']!=groups['a'].shift(-1),'b']
df['c'] = groups['c'].ffill()
df['c'] = groups['c'].shift()
# put the index back
df.index = idx
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加