Python 如何通过将一个变量与另一个变量进行匹配来创建一个新列,并让它重复,直到R中的第一个变量发生变化? 受体 年 月 白天 小时 小时公司 拉特 朗 高度 压力 日期 1. 2018 1. 3. 19 0 31.768 -106.501 500 835.6 2018-01-03 19:00:00 1. 2018 1. 3. 18 -1 31.628 -106.350 508.8 840.5 2018-01-03 18:00:00 1. 2018 1. 3. 17 -2 31.489 -106.180 526.2 839.4 2018-01-03 17:00:00 1. 2018 1. 3. 16 -3 31.372 -105.974 547.6 836.8 2018-01-03 16:00:00 1. 2018 1. 3. 15 -4 31.289 -105.731 555.3 829.8 2018-01-03 15:00:00 1. 2018 1. 3. 14 -5 31.265 -105.462 577.8 812.8 2018-01-03 14:00:00 1. 2018 1. 3. 13 -6 31.337 -105.175 640 793.9 2018-01-03 13:00:00 1. 2018 1. 3. 12 -7 31.492 -104.897 645.6 809.2 2018-01-03 12:00:00 1. 2018 1. 3. 11 -8 31.671 -104.700 686.8 801 2018-01-03 11:00:00 1. 2018 1. 3. 10 -9 31.913 -104.552 794.2 795.8 2018-01-03 10:00:00 2. 2018 1. 4. 19 0 31.768 -106.501 500 830.9 2018-01-04 19:00:00 2. 2018 1. 4. 18 -1 31.904 -106.635 611.5 819.5 2018-01-04 18:00:00 2. 2018 1. 4. 17 -2 32.070 -106.749 709.7 808 2018-01-04 17:00:00 2. 2018 1. 4. 16 -3 32.223 -106.855 787.3 794.9 2018-01-04 16:00:00
尝试用Python 如何通过将一个变量与另一个变量进行匹配来创建一个新列,并让它重复,直到R中的第一个变量发生变化? 受体 年 月 白天 小时 小时公司 拉特 朗 高度 压力 日期 1. 2018 1. 3. 19 0 31.768 -106.501 500 835.6 2018-01-03 19:00:00 1. 2018 1. 3. 18 -1 31.628 -106.350 508.8 840.5 2018-01-03 18:00:00 1. 2018 1. 3. 17 -2 31.489 -106.180 526.2 839.4 2018-01-03 17:00:00 1. 2018 1. 3. 16 -3 31.372 -105.974 547.6 836.8 2018-01-03 16:00:00 1. 2018 1. 3. 15 -4 31.289 -105.731 555.3 829.8 2018-01-03 15:00:00 1. 2018 1. 3. 14 -5 31.265 -105.462 577.8 812.8 2018-01-03 14:00:00 1. 2018 1. 3. 13 -6 31.337 -105.175 640 793.9 2018-01-03 13:00:00 1. 2018 1. 3. 12 -7 31.492 -104.897 645.6 809.2 2018-01-03 12:00:00 1. 2018 1. 3. 11 -8 31.671 -104.700 686.8 801 2018-01-03 11:00:00 1. 2018 1. 3. 10 -9 31.913 -104.552 794.2 795.8 2018-01-03 10:00:00 2. 2018 1. 4. 19 0 31.768 -106.501 500 830.9 2018-01-04 19:00:00 2. 2018 1. 4. 18 -1 31.904 -106.635 611.5 819.5 2018-01-04 18:00:00 2. 2018 1. 4. 17 -2 32.070 -106.749 709.7 808 2018-01-04 17:00:00 2. 2018 1. 4. 16 -3 32.223 -106.855 787.3 794.9 2018-01-04 16:00:00,python,r,dataframe,reticulate,Python,R,Dataframe,Reticulate,尝试用np.nan填充未更改值的位置,用date(该索引的)填充已更改值的位置,然后使用.ffill() df.receptor.shift().ne(df.receptor)将给出受体值变化的位置。比较上一个值和当前值以查看更改 df['date1'] = np.where(df.receptor.shift().ne(df.receptor), df.date, np.nan) df.date1 = df.date1.ffill() 受体 年 月 白天 小时 小时公司 拉特 朗 高度 压
np.nan
填充未更改值的位置,用date
(该索引的)填充已更改值的位置,然后使用.ffill()
df.receptor.shift().ne(df.receptor)
将给出受体值变化的位置。比较上一个值和当前值以查看更改
df['date1'] = np.where(df.receptor.shift().ne(df.receptor), df.date, np.nan)
df.date1 = df.date1.ffill()
受体 年 月 白天 小时 小时公司 拉特 朗 高度 压力 日期 日期1 0 1. 2018 1. 3. 19 0 31.768 -106.501 500 835.6 2018-01-03 19:00:00 2018-01-03 19:00:00 1. 1. 2018 1. 3. 18 -1 31.628 -106.350 508.8 840.5 2018-01-03 18:00:00 2018-01-03 19:00:00 2. 1. 2018 1. 3. 17 -2 31.489 -106.180 526.2 839.4 2018-01-03 17:00:00 2018-01-03 19:00:00 3. 1. 2018 1. 3. 16 -3 31.372 -105.974 547.6 836.8 2018-01-03 16:00:00 2018-01-03 19:00:00 4. 1. 2018 1. 3. 15 -4 31.289 -105.731 555.3 829.8 2018-01-03 15:00:00 2018-01-03 19:00:00 5. 1. 2018 1. 3. 14 -5 31.265 -105.462 577.8 812.8 2018-01-03 14:00:00 2018-01-03 19:00:00 6. 1. 2018 1. 3. 13 -6 31.337 -105.175 640 793.9 2018-01-03 13:00:00 2018-01-03 19:00:00 7. 1. 2018 1. 3. 12 -7 31.492 -104.897 645.6 809.2 2018-01-03 12:00:00 2018-01-03 19:00:00 8. 1. 2018 1. 3. 11 -8 31.671 -104.700 686.8 801 2018-01-03 11:00:00 2018-01-03 19:00:00 9 1. 2018 1. 3. 10 -9 31.913 -104.552 794.2 795.8 2018-01-03 10:00:00 2018-01-03 19:00:00 10 2. 2018 1. 4. 19 0 31.768 -106.501 500 830.9 2018-01-04 19:00:00 2018-01-04 19:00:00 11 2. 2018 1. 4. 18 -1 31.904 -106.635 611.5 819.5 2018-01-04 18:00:00 2018-01-04 19:00:00 12 2. 2018 1. 4. 17 -2 32.070 -106.749 709.7 808 2018-01-04 17:00:00 2018-01-04 19:00:00 13 2. 2018 1. 4. 16 -3 32.223 -106.855 787.3 794.9 2018-01-04 16:00:00 2018-01-04 19:00:00
使用
data.table
可以尝试
library(data.table)
setDT(df) #converting into data.frame
df[,date1 := date[1],receptor] # taking the first date per receptor
df
#Output
receptor year month day hour hour.inc lat lon height pressure date date1
1: 1 2018 1 3 19 0 31.768 -106.501 500.0 835.6 2018-01-03 19:00:00 2018-01-03 19:00:00
2: 1 2018 1 3 18 -1 31.628 -106.350 508.8 840.5 2018-01-03 18:00:00 2018-01-03 19:00:00
3: 1 2018 1 3 17 -2 31.489 -106.180 526.2 839.4 2018-01-03 17:00:00 2018-01-03 19:00:00
4: 1 2018 1 3 16 -3 31.372 -105.974 547.6 836.8 2018-01-03 16:00:00 2018-01-03 19:00:00
5: 1 2018 1 3 15 -4 31.289 -105.731 555.3 829.8 2018-01-03 15:00:00 2018-01-03 19:00:00
6: 1 2018 1 3 14 -5 31.265 -105.462 577.8 812.8 2018-01-03 14:00:00 2018-01-03 19:00:00
7: 1 2018 1 3 13 -6 31.337 -105.175 640.0 793.9 2018-01-03 13:00:00 2018-01-03 19:00:00
8: 1 2018 1 3 12 -7 31.492 -104.897 645.6 809.2 2018-01-03 12:00:00 2018-01-03 19:00:00
9: 1 2018 1 3 11 -8 31.671 -104.700 686.8 801.0 2018-01-03 11:00:00 2018-01-03 19:00:00
10: 1 2018 1 3 10 -9 31.913 -104.552 794.2 795.8 2018-01-03 10:00:00 2018-01-03 19:00:00
11: 2 2018 1 4 19 0 31.768 -106.501 500.0 830.9 2018-01-04 19:00:00 2018-01-04 19:00:00
12: 2 2018 1 4 18 -1 31.904 -106.635 611.5 819.5 2018-01-04 18:00:00 2018-01-04 19:00:00
13: 2 2018 1 4 17 -2 32.070 -106.749 709.7 808.0 2018-01-04 17:00:00 2018-01-04 19:00:00
14: 2 2018 1 4 16 -3 32.223 -106.855 787.3 794.9 2018-01-04 16:00:00 2018-01-04 19:00:00
在计算
日期
列后,考虑基本R的平均值
,使用头
返回每个日期分组的第一个日期时间:
df确保避免列引用的句点限定符,以避免与属性冲突(即df['receptor']
,df['date1']
)。请参阅文档中的警告。这是干净的。今天给我的团队领导留下了深刻的印象。我不处理非常大的数据集,所以我不太使用Datatable。但这是我用DT解决问题的第二个方法。顺便说一句,我并没有因为这件事而受到表扬。我说是保罗骗了我。谢谢@bob0901。有时我发现data.table
对于此类问题非常方便,这一直是我的首选,实际上我也能够用它处理大型数据集。