我有一個資料框,我想在其中計算某個列(值)上的 diff()。要計算的期間數來自另一列(期間)。
| 期間 | 價值 | 差異 |
|---|---|---|
| 0 | 32 | 0 |
| 1 | 35 | 3 |
| 2 | 37 | 5 |
| 2 | 41 | 6 |
我試過:
df['Diff'] = df['Value'].diff(periods=df['Periods'])
=> 這將回傳 TypeError: cannot convert the series to <class 'int'>
在不同的帖子中,我看到我們需要使用 .astype(int):
df['Diff'] = df['Value'].diff(periods=df['Periods'].astype(int))
=> 但這給出了相同的 TypeError: cannot convert the series to <class 'int'>
我也試過.values:
df['Diff'] = df['Value'].diff(periods=df['Periods'].values)
=> 但回傳 TypeError: only size-1 陣列可以轉換為 Python 標量
有誰知道我在這里想念什么?
uj5u.com熱心網友回復:
df['Diff'] = df.Value - pd.Series(df.Value[df.index - df.Period].values, df.index)
uj5u.com熱心網友回復:
您可以手動執行此操作。reset_index以確保您的 DataFrame 具有RangeIndex. 然后從索引中減去句點以找出您需要從中提取“值”的行并將其映射到原始資料幀。現在您可以手動減去以計算包含變數“Periods”的差異。
df = df.reset_index(drop=True)
df['Value_shift'] = (df.index - df['Periods']).map(df['Value'])
df['Diff'] = df['Value'] - df['Value_shift']
print(df)
Periods Value Value_shift Diff
0 0 32 32 0
1 1 35 32 3
2 2 37 32 5
3 2 41 35 6
uj5u.com熱心網友回復:
一種方法可能如下 - 不是最有效的,但可以完成作業:
import pandas as pd
import numpy as np
df = pd.DataFrame({"Periods":[0,1,2,2], "Value":[32, 35, 37, 41]})
df["Diff"] = np.diag(df.apply(lambda x:df["Value"].diff(x["Periods"]), axis=1))
df
輸出
Periods Value Diff
0 0 32 0.0
1 1 35 3.0
2 2 37 5.0
3 2 41 6.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/377061.html
