[英]Pandas: groupby and get index of first row matching condition
我有一個名為df
的熊貓DataFrame
,按時間順序排序。 每一行都是對網站的訪問。
df
有一個名為display
的列,指示在訪問期間顯示特定頁面的次數。 此列由0或更大的整數填充。 df
也有一個user
列。
我想知道每個用戶訪問該網站多少次才看到我感興趣的關鍵業務頁面。
要知道這一點,我需要一個用戶索引的Series
填充如下:
display
為非零的第一行為止的行數(即訪問次數)(即用戶看到該頁面的第一次訪問) 我認為使用普通ol'argmax會更容易:
In [11]: df = pd.DataFrame([[1, 0], [1, 0], [1, 1], [2, 0], [2, 1]], columns=['user', 'display'])
In [12]: df
Out[12]:
user display
0 1 0
1 1 0
2 1 1
3 2 0
4 2 1
In [13]: df.groupby('user')['display'].apply(lambda x: np.argmax(x.values))
Out[13]:
user
1 2
2 1
Name: display, dtype: int64
雖然為了清楚起見(或如果顯示不是布爾值),我將定義一個新列:
In [21]: df['seen'] = df['display'] > 0
In [22]: df.groupby('user')['seen'].apply(lambda x: np.argmax(x.values))
Out[22]:
user
1 2
2 1
Name: seen, dtype: int64
注意:我的舊答案說df.groupby('user')['display'].apply(np.argmax)
不太正確,因為這給出了第一個True 索引 。
df.groupby('user').display.apply(nvisits_before_display)
import numpy as np
def nvisits_before_display(x):
try:
return np.where(x > 0)[0].item(0) + 1
except IndexError:
return 0
這是什么意思?
x > 0
,當應用於列display
,表示該頁面已在給定訪問中顯示 np.where(<condition>)[0]
返回一個numpy.ndarray
其中包含滿足條件的索引(有序整數)的位置 item(0)
即將占據這些位置中的第一個位置,這意味着頁面首次顯示 + 1
代表為首次訪問該頁面的用戶設置值1 groupby('user')
將nvisits_before_display
函數應用於屬於每個用戶的行
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.