ループトラフデータフレームの行を更新します

サイモン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()

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=378023&siteId=1