簡體   English   中英

如何獲得過濾后的數據框進行計算,同時將原始數據框保留在熊貓中?

[英]How to get the filtered dataframe for calculations while retaining the original one in pandas?

我對熊貓如何使用過濾后的行有些困惑。 假設我們有這個市場數據數據框“ df”:

Time                    Open    High    Low     Close   Volume
31.12.2003 23:00:00.000 82440   83150   82440   82880   47686.32
01.01.2004 23:00:00.000 82830   83100   82350   83100   37571.04
02.01.2004 23:00:00.000 83100   83100   83100   83100   0.00

現在,我們對行進行過濾,以僅在市場開放的那一天(交易量> 0)獲得df

df=df[df['Volume']>0]

由於我們過濾了數據框的方式,有一些空行仍然具有索引和值,但是例如,如果這樣做,它們就不會用於計算中:

df.mean()

過濾后的行的值不會出現在計算中。

令人困惑的部分是:

僅使用未過濾的值,如何計算從第3行算起的最后2個值的平均值? 意思是,如果我們將第2行過濾掉,則應該得到第3行和第1行的平均值。

-----------編輯--------------嘿,謝謝你的評論,試圖更加清楚:

假設我們有以下示例數據框:

Index    Volume
0        1 
1        0
2        1
3        1

然后我們對其進行過濾:

df=df[df['Volume']>0]

如果我們將數據幀發送到numpy,則為了繪制或遍歷該數據幀,它還將發送我們不需要的行。

如果我們迭代這些數據,它還將迭代(並考慮)我們要排除的索引。

那么,如何避免排除排除行的數據框副本,從而避免這兩個問題?

我認為您在布爾索引方面遇到了一個非常普遍的問題。 當你試圖篩選DataFrameDataFrame的布爾值,則需要指定如何處理那里的東西是真正的某些列/行,但假的其他列/行的情況。 你想去的地方東西都是真的無處不在 ,或任何物品。

在這種情況下,這特別棘手,因為您的DataFrame是一維的,因此您希望事情像Series一樣工作,而在其中沒有歧義:對於Series ,行要么為True,要么為False; 在某些列中不能為True,而在其他列中不能為False。

要解決與DataFrames的歧義,請使用any()all()方法:

In [36]: df
Out[36]: 
       Volume
Index        
0           1
1           0
2           1
3           1

[4 rows x 1 columns]

In [37]: df[(df > 0).all(1)]
Out[37]: 
       Volume
Index        
0           1
2           1
3           1

[3 rows x 1 columns]

all()內部的1僅表示1軸(列)


這是一個二維示例,可以幫助您解決問題:

In [39]: df = pd.DataFrame({"A": ['a', 'b', 'c', 'd'], "B": ['e', 'f', 'g', 'h']})

In [40]: df
Out[40]: 
   A  B
0  a  e
1  b  f
2  c  g
3  d  h

[4 rows x 2 columns]

In [41]: bf = pd.DataFrame({"A": [True, True, False, False], "B": [True, False, True, False]})

In [42]: bf
Out[42]: 
       A      B
0   True   True
1   True  False
2  False   True
3  False  False

[4 rows x 2 columns]

首先,以“錯誤”的方式解決歧義。 目前尚不清楚該如何處理(1,'B'),因為它在bf false,但是有1行和B列,因此填充了一個NaN

In [43]: df[bf]
Out[43]: 
     A    B
0    a    e
1    b  NaN
2  NaN    g
3  NaN  NaN

[4 rows x 2 columns]

全部都只匹配第一行,因為那是唯一兩個都為True的行:

In [44]: df[bf.all(1)]
Out[44]: 
   A  B
0  a  e

[1 rows x 2 columns]

any匹配除最后一行以外的所有內容,因為該行同時具有False es

In [45]: df[bf.any(1)]
Out[45]: 
   A  B
0  a  e
1  b  f
2  c  g

[3 rows x 2 columns]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM