必須有一個簡單的方法來做到這一點,但我錯過了它。首先,想象在Excel中的情況:高效的做熊貓操作和跳行的方式
- 我有一列百分比變化。 (假設列A)
- 在下一列(B)中,我想根據百分比變化創建一個以1000開始的索引系列。在Excel中,我是這樣做的。 -set B1 to 1000 -set B2 to formula =(1 + A2)* B1 - 將列拷貝下來。簡單。
現在,我想做與大熊貓同樣的事情,問題是目標數組在下面的代碼結果成爲楠:
import pandas as pd
import numpy as np
df_source = pd.DataFrame(np.random.normal(0,.05,10), index=range(10), columns=['A'])
df_target = pd.DataFrame(index = df_source.index)
df_target.loc[0,"A"] = 1000 # initialize target array to start at 1000
df_target["A"] = (1 + df_source) * df_target["A"].shift(1) # How to skip first row?
目標陣列變成NaN,因爲第一行試圖引用「關閉數據框」的值,所以整列返回NaN。
我意識到我可以用循環遍歷行,跳過第一行,但是這對於數據集或迭代的大小來說是非常緩慢和不實際的。
必須有一種方法來使用熊貓/ numpy數組函數,但要告訴它跳過計算中的第一行。怎麼做?我試過布爾編制索引,但不能讓它起作用,也許有辦法告訴熊貓跳過NaN結果......但最好的方法似乎是一個限定詞,說「應用此代碼,從第二排「。
我在這裏錯過了什麼?
編輯:
看起來像我的問題比我意識到更深。 jezrael的答案解決了NA問題,但我認爲我對熊貓邏輯感到困惑。我上面給出的代碼不工作,因爲它不工作元素。例如,簡單的例子:
seriesdf = pd.DataFrame(index = range(10))
seriesdf['A'] = 1
seriesdf['A'].ix[1:] = 1 + seriesdf['A'].shift(1)
給出結果
A
0 1
1 2
2 2
3 2
4 2
5 2
6 2
7 2
8 2
9 2
沒有上升計數爲我承擔了。所以問題是在熊貓數據框上逐行計算的最有效方法是什麼?速度在這個應用程序很重要,所以我寧願不通過行。
新的Python程序員在這裏試圖弄清楚這一點。這些答案向我展示瞭如何學習/爲自己繪製這樣的東西,非常感謝。謝謝!
嗯,你想要的輸出是什麼?最好的東西是[在這裏](http://pandas.pydata.org/pandas-docs/stable/10min.html)。 – jezrael
感謝您對此@jezrael的幫助。這些解決方案的工作,但熊貓.cumprod()原來是最簡單的解決方案。考慮到python與速度更快的語言的速度非常關鍵,以避免在可能的情況下迭代。謝謝! – mmee
超級,它的工作。我認爲'熊貓'是一個了不起的圖書館。 – jezrael