簡體   English   中英

在 Pandas 數據框中查找具有相同值的行之前的行

[英]find row before rows with same values in pandas dataframe

我有一個這樣的數據框:

  peak-date  
0    17 Jan  
1    17 Jan  
2    31 Mar  
3    30 Apr  
4    31 May  
5    26 Jun  
6    26 Jun  

我想在峰值日期值變得相同時找到行之前的行。 在這種情況下,這將是peak-date31 May 我可以使用 df['peak-date'].diff() 對 r 數值執行此操作,但是我在這里如何執行?

一種可能的方法如下:首先,您可以使用數據幀中的to_datetime讀取日期格式的字符串,並使用diff函數查找每行之間的diff 此外,我們可以找到以秒為單位的差異,以便有浮點數。 然后,將差異行向上移動 2,並搜索第一次出現的 0 差異將給出peak-date值。

# read csv for date with month day
df = pd.read_csv('test.csv', sep='\s\s+', engine='python')

# Convert to datetime with difference in days
df['diff'] = pd.to_datetime(df['peak-date'], format='%d %b').diff()

# save difference in seconds in different column and shift by 2
df['diff_seconds'] = df['diff'].apply(lambda row: row.total_seconds())
df['diff_seconds'] = df['diff_seconds'].shift(-2)

查看dataframe

  peak-date    diff  diff_seconds
0    17 Jan     NaT     6307200.0
1    17 Jan  0 days     2592000.0
2    31 Mar 73 days     2678400.0
3    30 Apr 30 days     2246400.0
4    31 May 31 days           0.0
5    26 Jun 26 days     2592000.0
6    26 Jun  0 days     2246400.0
6    26 Jul 30 days           0.0
6    21 Aug 26 days           NaN
6    21 Aug  0 days           NaN

現在獲取第一個連續日期之前的值:

# look for the first occurence index and get the row by index
first_occur_index = df.diff_seconds.eq(0.0).idxmax()
df.iloc[first_occur_index]['peak-date']

結果:

'31 May'

暫無
暫無

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

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