假設你有一個數據幀DF如何添加列到數據幀中的大熊貓
ID data
1 1234 123
2 1234 213
3 1234 432
4 1234 32
5 1234 54
6 5678 67
你想添加一個名爲「計算」新列返回一個溫控功能: 數據[1] - 數據[0]/data [0](因爲我們需要來自前一個單元格的數據,'計算'的第一個單元格將爲0)
我們如何添加此列如何編寫此函數,不在數據存儲的同一行上?
假設你有一個數據幀DF如何添加列到數據幀中的大熊貓
ID data
1 1234 123
2 1234 213
3 1234 432
4 1234 32
5 1234 54
6 5678 67
你想添加一個名爲「計算」新列返回一個溫控功能: 數據[1] - 數據[0]/data [0](因爲我們需要來自前一個單元格的數據,'計算'的第一個單元格將爲0)
我們如何添加此列如何編寫此函數,不在數據存儲的同一行上?
在你提到的情況下,你會使用diff
。例如:
import pandas as pd
df = pd.DataFrame({'data':[123, 312, 432, 32, 54, 67]})
df['new'] = df['data'].diff()/df['data']
其中產量:
data new
0 123 NaN
1 312 0.605769
2 432 0.277778
3 32 -12.500000
4 54 0.407407
5 67 0.194030
在一般情況下,雖然,這些類型的東西都是量化的技巧。轉移和切片可能非常有用。例如,假設我們想
(data[i] + data[i+1])/data[i]
如果你熟悉numpy的數組,你可能會嘗試:
df['new'] = (df['data'][:-1] + df['data'][1:])/df['data']
,因爲這樣pandas
處理自動對齊,這樣的結果會比略有不同我們以前的一個:
data new
0 123 NaN
1 312 2
2 432 2
3 32 2
4 54 2
5 67 NaN
因此,pandas
這是更好的順序明確轉向,而不是使用切片,該類別中ASE:
df['new'] = (df['data'].shift(1) + df['data'])/df['data'].astype(float)
這產生了:
data new
0 123 NaN
1 312 1.394231
2 432 1.722222
3 32 14.500000
4 54 1.592593
5 67 1.805970
你僅僅可以找到相對差,然後歸咎於一個0:
import pandas as pd
df = pd.DataFrame({
'data': range(5)
})
df['calc'] = (df.data.shift(1) - df.data)/df.data
df.calc.values[0] = 0
>>> df
data calc
0 0 0
1 1 -1.000000
2 2 -0.500000
3 3 -0.333333
4 4 -0.250000
5 rows × 2 columns