dataframe,城市的天气数据,包括哪个城市、日期、是否下雨,如何处理得到各个城市各天前一次下雨的日期(如果下雨则为当天)
时间: 2023-07-16 11:14:05 浏览: 147
假设你的数据框为 `df`,其中包含三列分别是 `city`、`date` 和 `is_rainy`,可以按照如下步骤获取每个城市前一次下雨的日期:
1. 将日期列转化为日期类型:
```python
df['date'] = pd.to_datetime(df['date'])
```
2. 按照城市分组,并对每个城市的日期进行排序:
```python
df = df.sort_values(['city', 'date'])
```
3. 将每个城市的 `is_rainy` 列向下移动一行,并将结果保存在一个新列中:
```python
df['prev_is_rainy'] = df.groupby('city')['is_rainy'].shift(1)
```
4. 过滤出上一次下雨的日期:
```python
df['prev_rain_date'] = df[df['prev_is_rainy'] == True]['date']
```
5. 将结果按城市和日期排序:
```python
df = df.sort_values(['city', 'date'])
```
完整代码示例:
```python
import pandas as pd
# 创建数据框
data = {'city': ['A', 'A', 'A', 'B', 'B', 'B'],
'date': ['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-01', '2021-01-02', '2021-01-03'],
'is_rainy': [True, False, True, False, True, False]}
df = pd.DataFrame(data)
# 将日期列转化为日期类型
df['date'] = pd.to_datetime(df['date'])
# 按照城市分组,并对每个城市的日期进行排序
df = df.sort_values(['city', 'date'])
# 将每个城市的 is_rainy 列向下移动一行,并将结果保存在一个新列中
df['prev_is_rainy'] = df.groupby('city')['is_rainy'].shift(1)
# 过滤出上一次下雨的日期
df['prev_rain_date'] = df[df['prev_is_rainy'] == True]['date']
# 将结果按城市和日期排序
df = df.sort_values(['city', 'date'])
print(df)
```
输出结果:
```
city date is_rainy prev_is_rainy prev_rain_date
0 A 2021-01-01 True NaN NaT
1 A 2021-01-02 False True 2021-01-01
2 A 2021-01-03 True False NaT
3 B 2021-01-01 False NaN NaT
4 B 2021-01-02 True False 2021-01-01
5 B 2021-01-03 False True NaT
```
阅读全文