我有两组数据帧:datamax,datamax2015和datamin,datamin2015。
数据片段:
print(datamax.head())
print(datamin.head())
print(datamax2015.head())
print(datamin2015.head())
Date ID Element Data_Value
0 2005-01-01 USW00094889 TMAX 156
1 2005-01-02 USW00094889 TMAX 139
2 2005-01-03 USW00094889 TMAX 133
3 2005-01-04 USW00094889 TMAX 39
4 2005-01-05 USW00094889 TMAX 33
Date ID Element Data_Value
0 2005-01-01 USC00200032 TMIN -56
1 2005-01-02 USC00200032 TMIN -56
2 2005-01-03 USC00200032 TMIN 0
3 2005-01-04 USC00200032 TMIN -39
4 2005-01-05 USC00200032 TMIN -94
Date ID Element Data_Value
0 2015-01-01 USW00094889 TMAX 11
1 2015-01-02 USW00094889 TMAX 39
2 2015-01-03 USW00014853 TMAX 39
3 2015-01-04 USW00094889 TMAX 44
4 2015-01-05 USW00094889 TMAX 28
Date ID Element Data_Value
0 2015-01-01 USC00200032 TMIN -133
1 2015-01-02 USC00200032 TMIN -122
2 2015-01-03 USC00200032 TMIN -67
3 2015-01-04 USC00200032 TMIN -88
4 2015-01-05 USC00200032 TMIN -155
[对于datamax,datamax2015,我想比较它们的Data_Value
列并在datamax2015中创建条目的数据框,其Data_Value
大于一年中同一天的datamax中的所有条目。因此,预期的输出应该是一个数据帧,其中的行从2015-01-01至2015-12-31,但只有Data_Value
列中的值大于Data_Value
列中的值时才带有日期datamax数据帧的
即4行,从1到364列中的任何一个,取决于上述条件。
我想为datamin和datamin2015数据帧求逆(min)。
我尝试了以下代码:
upper = []
for row in datamax.iterrows():
for j in datamax2015["Data_Value"]:
if j > row["Data_Value"]:
upper.append(row)
lower = []
for row in datamin.iterrows():
for j in datamin2015["Data_Value"]:
if j < row["Data_Value"]:
lower.append(row)
有人可以帮我解决我的问题吗?
此代码完成了数据分钟所需的操作。也尝试使其适应于datamax对称情况-如果您有困难并乐于提供进一步帮助,请发表评论。
from datetime import datetime
import pandas as pd
datamin = pd.DataFrame({"date": pd.date_range(start=datetime(2005, 1, 1), end=datetime(2015, 12, 31)), "Data_Value": 1})
datamin["day_of_year"] = datamin["date"].dt.dayofyear
# Set the value for the 4th day of the year higher in order for the desired result to be non-empty
datamin.loc[datamin["day_of_year"]==4, "Data_Value"] = 2
datamin2015 = pd.DataFrame({"date": pd.date_range(start=datetime(2015, 1, 1), end=datetime(2015, 12, 31)), "Data_Value": 2})
datamin2015["day_of_year"] = datamin["date"].dt.dayofyear
# Set the value for the 4th day of the year lower in order for the desired result to be non-empty
datamin2015.loc[3, "Data_Value"] = 1
df1 = datamin.groupby("day_of_year").agg({"Data_Value": "min"})
df2 = datamin2015.join(df1, on="day_of_year", how="left", lsuffix="2015")
lower = df2.loc[df2["Data_Value2015"]<df2["Data_Value"]]
lower
我们将数据分钟按年份的天分组,以查找一年中每一天的所有年份的分钟(使用.dt.dayofyear
)。然后,我们将其与datamin2015结合在一起,最后可以将Data_Value2015与Data_Value进行比较,以查找其中data_Value在2015年中小于datamin中一年中所有同一天的最小值的行的索引。
在上面的示例中,按照我设置数据帧的方式,下排有1行。