gpt4 book ai didi

python - 在 pandas 数据框中查找具有相同值的行之前的行

转载 作者:太空宇宙 更新时间:2023-11-03 14:34:54 24 4
gpt4 key购买 nike

我有一个像这样的数据框:

  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() 对数值执行此操作,但我该如何在此处执行此操作?

最佳答案

一种可能的方法如下:首先,您可以在数据框中使用 to_datetime 读取日期格式的字符串,并使用 diff 函数查找每行之间的差异。另外,我们还可以求出以秒为单位的差值,这样就有了 float 。然后,将差异行向上移动 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)

查看数据框:

  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'

关于python - 在 pandas 数据框中查找具有相同值的行之前的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47026046/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com