パンダを使用する:
import pandas as pd
import numpy as np
df = pd.DataFrame(['AAAA', 'AAAA', 'AAAA', 'AAAA',
'BBBB', 'BBBB', 'BBBB', 'BBBB', 'CCCC', 'CCCC', 'CCCC',],
columns=['ID'])
def firstlast(a):
# For each character grouping set, create a 1d array of 0s padded
# with 1s, equal to length of the group.
a = np.zeros(len(a)-2)
a = np.pad(a, (1,1), 'constant', constant_values=(1,1))
return a
df['flag'] = (s.groupby(s).apply(firstlast).apply(pd.Series).stack()
.astype(int).values)
print(df)
ID flag
0 AAAA 1
1 AAAA 0
2 AAAA 0
3 AAAA 1
4 BBBB 1
5 BBBB 0
6 BBBB 0
7 BBBB 1
8 CCCC 1
9 CCCC 0
10 CCCC 1
がロジックに@cᴏʟᴅsᴘᴇᴇᴅからのビットを盗みます(これは上記のソリューションよりはるかに賢いですが)numpy.where
:
ids = df.ID
df['flag'] = np.where((ids!=ids.shift(1)) | (ids!=ids.shift(-1)), 1, 0)
print(df)
ID flag
0 AAAA 1
1 AAAA 0
2 AAAA 0
3 AAAA 1
4 BBBB 1
5 BBBB 0
6 BBBB 0
7 BBBB 1
8 CCCC 1
9 CCCC 0
10 CCCC 1
ここで 'pandas'やプレーンなPythonを使っていますか? –
この関数はrespには何を使用しますか?それはどこに便利ですか? SASの –
は、groupbyの最初と最後の行を識別するだけです。機能は基本的にパンダでグループバイをしているとき暗黙のうちに、私の経験では決して必要ではありません(ほとんど?) – JohnE