![](/img/trans.png)
[英]Split rows to create new rows in Pandas Dataframe with same other row values
[英]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-date
為31 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.