0
SQL Serverからpandas形式のデータを抽出しました。Pandas:同じ基準を満たす異なる行からの値の一括置換
df = pd.DataFrame({'Day':(1,2,3,4,1,2,3,4),'State':('A','A','A','A','B','B','B','B'),'Direction':('N','S','N','S','N','S','N','S'),'values':(12,34,22,37,14,16,23,43)})
>>> df
Day Direction State values
0 1 N A 12
1 2 S A 34
2 3 N A 22
3 4 S A 37
4 1 N B 14
5 2 S B 16
6 3 N B 23
7 4 S B 43
今、私は同じ日、同じ方向ではなく(状態== A)と、すべての値を代入したい、それ自体+値で同じ日と同じ状態ではなく(状態== Bと:このような構造)。例えば、次のように:値が異なる行からのものであるので
df.loc[(df.Day == 1) & (df.Direction == 'N') & (df.State == 'A'),'values'] = df.loc[(df.Day == 1) & (df.Direction == 'N') & (df.State == 'A'),'values'].values + df.loc[(df.Day == 1) & (df.Direction == 'N') & (df.State == 'B'),'values'].values
>>> df
Day Direction State values
0 1 N A 26
1 2 S A 34
2 3 N A 22
3 4 S A 37
4 1 N B 14
5 2 S B 16
6 3 N B 23
7 4 S B 43
注意最初の行の値がcombine_first関数を使用するので、種類の困難、26(12 + 14) に12から変更されましたか?
ここでは、2つのループ( 'Day'と 'Direction')と上記の帰属文を使用する必要があります。データフレームが大きくなると非常に遅くなります。あなたはこれを行うためのスマートで効率的な方法がありますか?
oh、groupbyと適用:lovely mate of funcs。初心者としては、自分ができることについて常に最高の気分を味わいますが、それを習得するにはさらに訓練が必要です。多くのありがとう、お嬢様 – lkonweb
心配はいりません。それが役に立つと思ったら答えを受け入れてください。 – Allen