簡體   English   中英

在熊貓數據框中查找值

[英]Lookup values in pandas dataframe

Date        Ticker    Volume
2019-03-21    AAPL        10
2019-03-21    GOOG         5
2019-03-21     IBM         0
2019-03-25    AAPL         0
2019-03-25     IBM         0
2019-03-25    GOOG        12
2019-03-27    AAPL         0
2019-03-27     IBM        16
2019-03-27    GOOG        10
2019-03-28     IBM         9
2019-03-28    GOOG         0
2019-03-28    AAPL        10

假設數據按日期排序。 如何精確計算每個日期的第一行。 如果 'Volume' 為 0,則取下一行,直到它不為 0。

Date        Ticker    volume
2019-03-21    AAPL        10
2019-03-25    GOOG        12
2019-03-27     IBM        16
2019-03-28     IBM         9

我曾嘗試使用 lambda,但似乎不起作用。

df_new = df.groupby(['Date']).head(lambda x: 2 if df['Volume'] == 0 else 1).reset_index(0, drop=True)

TypeError: unorderable types: int() < function()

如果我有足夠的數據並且喜歡從每個日期精確到 #2-5 行(連續)。 我應該使用范圍函數嗎?

使用帶有掩碼的boolean indexingSeries.ne表示不等於,然后使用DataFrame.drop_duplicates

df = df[df['Volume'].ne(0)].drop_duplicates('Date')
print (df)
         Date Ticker  Volume
0  2019-03-21   AAPL      10
5  2019-03-25   GOOG      12
7  2019-03-27    IBM      16
9  2019-03-28    IBM       9

替代DataFrame.query

df = df.query('Volume != 0').drop_duplicates('Date')

編輯:

對於提取第二/第三/下一列使用GroupBy.nth ,只有 python 從0計數,因此對於第二行需要1 ,對於第三行2

df1 = df[df['Volume'].ne(0)]
print (df1)
          Date Ticker  Volume
0   2019-03-21   AAPL      10
1   2019-03-21   GOOG       5
5   2019-03-25   GOOG      12
7   2019-03-27    IBM      16
8   2019-03-27   GOOG      10
9   2019-03-28    IBM       9
11  2019-03-28   AAPL      10

df2 = df1.groupby('Date').nth(1)
print (df2)
           Ticker  Volume
Date                     
2019-03-21   GOOG       5
2019-03-27   GOOG      10
2019-03-28   AAPL      10

GroupBy.cumcount用於掩碼:

df2 = df1[df1.groupby('Date').cumcount().eq(1)]
print (df2)
          Date Ticker  Volume
1   2019-03-21   GOOG       5
8   2019-03-27   GOOG      10
11  2019-03-28   AAPL      10

使用drop_duplicates

df1=df.loc[df.Volume!=0].drop_duplicates('Date')
Out[13]: 
         Date Ticker  Volume
0  2019-03-21   AAPL      10
5  2019-03-25   GOOG      12
7  2019-03-27    IBM      16
9  2019-03-28    IBM       9

暫無
暫無

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

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