0

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 になります。abbc

この手順により、ほぼ次の結果が得られるはずです。

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

パンダの有無にかかわらず、これを達成するためのよりエレガントな方法はありますか?

4

1 に答える 1