web-dev-qa-db-ja.com

pandasの連続する行の差の結果である列を追加する

このようなデータフレームがあるとしましょう

    A   B
0   a   b
1   c   d
2   e   f 
3   g   h

0、1、2、3は時間、a、c、e、gは1つの時系列、b、d、f、hは別の時系列です。特定の列の連続する行の差を計算することで取得される元のデータフレームに2つの列を追加できる必要があります。

だから私はこのようなものが必要です

    A   B   dA
0   a   b  (a-c)
1   c   d  (c-e)
2   e   f  (e-g)
3   g   h   Nan

私はデータフレーム/シリーズでdiffと呼ばれるものを見ましたが、それは最初の要素がNanになるので少し異なります。

54
AMM

shift を使用します。

df['dA'] = df['A'] - df['A'].shift(-1)
91
exp1orer

diffを使用し、periods引数として-1を渡すことができます。

>>> df = pd.DataFrame({"A": [9, 4, 2, 1], "B": [12, 7, 5, 4]})
>>> df["dA"] = df["A"].diff(-1)
>>> df
   A   B  dA
0  9  12   5
1  4   7   2
2  2   5   1
3  1   4 NaN

[4 rows x 3 columns]
35
DSM

CSVでデータを使用する場合、これは完全に機能します。

my_data = pd.read_csv('sale_data.csv')
df = pd.DataFrame(my_data)
df['New_column'] = df['target_column'].diff(1)
print(df) #for the console but not necessary 
0
Seth Okeyo

ローリング差異は、次の方法でも計算できます。

df=pd.DataFrame(my_data)
my_data = pd.read_csv('sales_data.csv')
i=0
j=1
while j < len(df['Target_column']):
    j=df['Target_column'][i+1] - df['Target_column'][i] #the difference btwn two values in a column.
    i+=1 #move to the next value in the column.
    j+=1 #next value in the new column.
    print(j)
0
Seth Okeyo