サイモンFauconval:
私は、データフレームを持っていると私は、元の列の成長が含まれているいくつかの新しい列を作成します。
まず、私はNaN値でそれらを満たし、データフレームに新しい列を追加します。
その後、すべての行のために私は、前年度にあれば、前の行の対応をチェックし、それがない場合、私は、変数の成長に新しい列を記入します。そうでなければ私はNaN値のままにしておきます。
ここに私のコードは次のとおりです。
for index, row in df.iterrows():
if df.loc[index,'year'] == df.loc[index - 1, 'year'] + 1 and df.loc[index,'name'] == df.loc[index - 1, 'name']:
df.loc[index,k:] = (df.loc[index,1:k-1]/df.loc[index-1,1:k-1]) - 1
kは、私が作成した最初の新しい「成長」の列の列インデックスです。
このコードの問題は、それがどんな変更を加えることなく、NaN値を持つ新しい列を残していることです。私は何も間違っをしましたか?
感謝
Bishwarup Bhattacharjee:
df.sort_values('year', inplace = True)
growth_cols = [<your-growth-cols>]
new_cols = [x + "_growth" for x in growth_cols]
growth_df = df[growth_cols] / df[growth_cols].shift(1)
growth_df.rename(columns = dict(zip(growth_cols, new_cols)), inplace = True)
df = pd.concat([df, growth_df], axis =1)
df['gap'] = df.year.diff()
for col in new_cols:
df[col] = df[col] * df['gap']
df[col].replace(0, np.nan, inplace = True)
df.drop('gap', axis = 1, inplace = True)
EDIT(更新質問に基づきます):
あなたは、行を変更する必要があります
df['gap'] = df.year.diff()
に:
df['gap'] = df.groupby('name').diff()