我想在包含單列price
的pandas數據框中創建一個新列comp
。這個新列的值應該由對price
的當前值和最後3個值起作用的函數生成。 df.apply()
關閉一行,shift()
似乎沒有工作。專家是否有任何建議讓它在矢量化操作中工作?訪問python數據框中的前一行應用方法
-1
A
回答
0
使用系列總和group.apply()函數。下面假設您有一個名爲ID的索引或列,其中增加了行值1,2,3,...,可用於計算回3個值。
# SERIES SUM FUNCTION
def intsum(x):
if x < 3:
ser = df.price[(df.ID < x)]
else:
ser = df.price[(df.ID >= x - 3) & (df.ID < x)]
return ser.sum()
# APPLY FUNCTION
df['comp'] = df['ID'].apply(intsum)
0
可以使用rolling_sum
與參數min_periods=1
,因爲你想得先算值:
print df
price
0 1
1 2
2 3
3 4
4 5
5 6
6 7
df['comp'] = pd.rolling_sum(df['price'], window=3, min_periods=1)
print df
price comp
0 1 1
1 2 3
2 3 6
3 4 9
4 5 12
5 6 15
6 7 18
下一個解決方案是使用map
:
print df
price
0 1
1 2
2 3
3 4
4 5
5 6
6 7
def f(x):
return (df.price[(df.index - 1 >= x - 3) & (df.index - 1 < x)]).sum()
df['comp'] = df.index.map(f)
print df
price comp
0 1 1
1 2 3
2 3 6
3 4 9
4 5 12
5 6 15
6 7 18
相關問題
- 1. 無法訪問Spark數據框方法
- 2. 從熊貓數據幀前一天訪問一行應用
- 3. 在一行中訪問熊貓數據框中的數據
- 4. 數據幀 - 訪問前一行
- 5. 訪問其他方法中的數據
- 6. 從另一個數據庫訪問方法中調用數據庫訪問方法
- 7. 訪問前一行
- 8. 新Web應用程序的最佳數據訪問方法
- 9. 在rails應用程序中訪問post方法後的複選框行爲
- 10. 訪問自執行的函數中的另一種方法
- 11. 刪除數據框中的一行有條件的前一行
- 12. Python:在數據框中插入一行
- 13. Python - 如何訪問由方法設置的可變數據
- 14. JasperReports訪問Bean數據源的方法?
- 15. 在熊貓數據框中比較行和前一行的行數百萬行的最快方法
- 16. Python將類方法應用於數據幀的行
- 17. 訪問前一行數據幀,索引的日期差距
- 18. 多用戶訪問數據庫中的每行復選框
- 19. 哪一種最適合在Silverlight 3中進行數據訪問的方法?
- 20. PHP - Zend Framework - 使用靜態方法進行數據訪問
- 21. Spring /在一個bean的工廠方法中訪問當前applicationContext
- 22. 在Python中訪問父級方法
- 23. 在Python中訪問子方法Django
- 24. 無法將數據添加到訪問數據庫的前端
- 25. 從Python數據框的列中的每一行中刪除前x個字符
- 26. 從另一個類訪問wpf應用程序中的文本框數據
- 27. 實體框架訪問數據庫方法
- 28. Cocoa Models應該包含自己的數據訪問方法嗎?
- 29. 訪問內部方法在Python從另一種方法
- 30. 訪問數據框中的列名稱
'pd.rolling_apply' –
你可能想用'shift'或'rolling_apply'方法嘗試。 –
你可以添加例子嗎?也許幫助[這](http://stackoverflow.com/help/mcve)以及如何Stackoverflow [工程](http://stackoverflow.com/tour)。 – jezrael