【发布时间】:2022-01-16 22:55:29
【问题描述】:
我想根据“值”列过滤多行。例如,我想从channel_name 列中过滤velocity value>=1 & value <=5,我想从channel_name 列中过滤Temp value>=0 & value <=2。下面是我的 Pysaprk DF。
| start_timestamp | channel_name | value |
|---|---|---|
| 2020-11-02 08:51:50 | velocity | 1 |
| 2020-11-02 09:14:29 | Temp | 0 |
| 2020-11-02 09:18:32 | velocity | 0 |
| 2020-11-02 09:32:42 | velocity | 4 |
| 2020-11-03 13:06:03 | Temp | 2 |
| 2020-11-03 13:10:01 | Temp | 1 |
| 2020-11-03 13:54:38 | Temp | 5 |
| 2020-11-03 14:46:25 | velocity | 5 |
| 2020-11-03 14:57:31 | Kilometer | 6 |
| 2020-11-03 15:07:07 | Kilometer | 7 |
预期 DF:
| start_timestamp | channel_name | value |
|---|---|---|
| 2020-11-02 08:51:50 | velocity | 1 |
| 2020-11-02 09:32:42 | velocity | 4 |
| 2020-11-03 14:46:25 | velocity | 5 |
| 2020-11-02 09:14:29 | Temp | 0 |
| 2020-11-03 13:06:03 | Temp | 2 |
| 2020-11-03 13:10:01 | Temp | 1 |
我尝试了 channel_name Velocity,它工作正常。
df1=df.filter((df.channel_name == "velocity") & (df.interpreted_value >= 1 ) & (df.interpreted_value <= 5))
但我不知道如何为多个channel_name (如Velocity 和Temp)做到这一点:下面是代码,也让我知道这是否是正确的做法或我该怎么做。
df1=df.filter(((df.channel_name == "velocity") & (df.interpreted_value >= 1 ) &
(df.interpreted_value <= 5))) &
((df.channel_name == "Temp") & (df.interpreted_value >= 0 ) &
(df.interpreted_value <= 2))))
【问题讨论】:
标签: python dataframe pyspark apache-spark-sql