2 つの列を持つ pandas DataFrame を作成するとします。列の 1 つは数字を含み、もう 1 つは文字を含みます。このような:
import pandas as pd
from pprint import pprint
df = pd.DataFrame({'a': [1,2,3,4,5,6], 'b': ['y','x','y','x','y', 'y']})
pprint(df)
a b
0 1 y
1 2 x
2 3 y
3 4 x
4 5 y
5 6 y
ここで、x と等しかったときc
の最後の値と等しい値を持つ 3 番目の列 ( ) を作成したいとします。x の値がまだ検出されていない場合、値 inはデフォルトで 0 になります。a
b
b
c
この手順により、ほぼ次の結果が得られるはずです。
last_a = 0
c = []
for i,b in enumerate(df['b']):
if b == 'x':
last_a = df.iloc[i]['a']
c += [last_a]
df['c'] = c
pprint(df)
a b c
0 1 y 0
1 2 x 2
2 3 y 2
3 4 x 4
4 5 y 4
5 6 y 4
パンダの有無にかかわらず、これを達成するためのよりエレガントな方法はありますか?