特定条件下数据框单列中的值

Posted

技术标签:

【中文标题】特定条件下数据框单列中的值【英文标题】:Values in single column of dataframe by a certains conditions 【发布时间】:2018-08-21 00:10:15 【问题描述】:

我有两个数据框,我想“通过一定的条件组合它们”。我的第一个数据框有一周中的平均 Sms(avgSms) (1=Sunday, 2=Monday, 3=Tuesday...) ,小时和分钟:

df1:
       I   | Day_of_week | hour | min |    AvgSms
       #1          1          0     0      12
       #2          1          0     30     20
       #3          1          1     0      19
       #4          1          1     30     11
       #5          1          2     0      12
       #6          1          2     30     7
       ...        ...       ...    ...   ....
       #10         2          0     0      14
       #11         2          0     30     20
       #12         2          1     0      19
       #13         2          1     30     11
       ...        ...       ...    ...   ....
       #222        7         23     30     13

第二个数据帧有时间和短信,像这样:

 df2:       Time           Sms
     1 2012-01-01 00:00:00  10
     2 2012-01-01 00:30:00  11
     3 2012-01-01 01:00:00  13
     4 2012-01-01 01:30:00  10
     5 2012-01-01 02:00:00  7
     6 2012-01-01 02:30:00  3
     7 2012-01-01 03:00:00  3
     8 2012-01-01 03:30:00  2
      .......................
    400 2015-12-31 23:30:00  16

我想添加到数据帧 2,数据帧 1 的各个 avgSms 取决于可变时间是第二个还是第三个以及 x 小时和 y 和分钟。

我想要这样的东西:

         Time           Sms     avg
     1 2012-01-01 00:00:00  10  12 --> 2012-01-01 was Sunday=1, h=0 and min=0
     2 2012-01-01 00:30:00  11  20
     3 2012-01-01 01:00:00  13  19
     4 2012-01-01 01:30:00  10  11
     5 2012-01-01 02:00:00  7   ..
     6 2012-01-01 02:30:00  3
     7 2012-01-01 03:00:00  3
     8 2012-01-01 03:30:00  2
      .......................
    400 2015-12-31 23:30:00  16

【问题讨论】:

【参考方案1】:

df2 中格式化日期/时间后考虑 merge 并使用这些字段作为 by 值:

数据

txt=' I   Day_of_week hour min     AvgSms
1          1          0     0      12
2          1          0     30     20
3          1          1     0      19
4          1          1     30     11
5          1          2     0      12
6          1          2     30     7
10         2          0     0      14
11         2          0     30     20
12         2          1     0      19
13         2          1     30     11
222        7         23     30     13'

df1 <- read.table(text=txt, header = TRUE)

txt = '
    Time           Sms
1 "2012-01-01 00:00:00"  10
2 "2012-01-01 00:30:00"  11
3 "2012-01-01 01:00:00"  13
4 "2012-01-01 01:30:00"  10
5 "2012-01-01 02:00:00"  7
6 "2012-01-01 02:30:00"  3
7 "2012-01-01 03:00:00"  3
8 "2012-01-01 03:30:00"  2
'
df2 <- read.table(text=txt, header = TRUE)

日期/时间转换

df2$Date <- as.Date(df2$Time, format="%Y-%m-%d")
df2$Time <- as.POSIXct(df2$Time)

df2$Day_of_week <- as.integer(strftime(df2$Date,format="%w")) + 1
df2$hour <- as.integer(strftime(df2$Time,format="%H"))
df2$min <- as.integer(strftime(df2$Time,format="%M"))

合并

merge(df2, df1[-1], by=c("Day_of_week", "hour", "min"), all.x=TRUE)

#   Day_of_week hour min                Time Sms       Date AvgSms
# 1           1    0   0 2012-01-01 00:00:00  10 2012-01-01     12
# 2           1    0  30 2012-01-01 00:30:00  11 2012-01-01     20
# 3           1    1   0 2012-01-01 01:00:00  13 2012-01-01     19
# 4           1    1  30 2012-01-01 01:30:00  10 2012-01-01     11
# 5           1    2   0 2012-01-01 02:00:00   7 2012-01-01     12
# 6           1    2  30 2012-01-01 02:30:00   3 2012-01-01      7
# 7           1    3   0 2012-01-01 03:00:00   3 2012-01-01     NA
# 8           1    3  30 2012-01-01 03:30:00   2 2012-01-01     NA

【讨论】:

坦克很多。我有一个新问题:get_dummies vs categorical data 对于使用机器学习是相同的还是可以相同的? 没问题。至于你的新问题,说的太笼统了。在 R 中,这些类型将被分类为具有不同级别的因子。 我将在交叉验证后提出这个问题:Question

以上是关于特定条件下数据框单列中的值的主要内容,如果未能解决你的问题,请参考以下文章

根据条件将数据框的值移动到列表中

将 2 列中的值合并为 pandas 数据框中的单列

使用特定条件更新数据框

使用较低的函数将pyspark数据框中单列中的值转换为文本清理中的小写[重复]

listbox的值怎么获取vba

如何根据数据框中的值有条件地对数据进行分组?