我是Python'for'循环的新手,我正在尝试在数据框中计算一年中每一天的公式。我使用的公式如下:gdd=(((row_minrow_max)/2)-7)
。为了进一步解释,我需要找到每天的最高和最低温度,将它们除以2,然后从该商中减去7。
以下是数据:
import pandas as pd
df = {'Date': ['2021-01-01', '2021-01-01', '2021-01-01', '2021-01-02', '2021-01-02', '2021-01-02','2021-01-03','2021-01-03','2021-01-03'],
'Time': ['12:00:00 AM', '1:00:00 AM', '2:00:00 AM','12:00:00 AM', '1:00:00 AM', '2:00:00 AM','12:00:00 AM', '1:00:00 AM', '2:00:00 AM'],
'TEMP': ['3', '1', '12','4', '8', '7','9', '12', '8']}
df = pd.DataFrame(df)
将“日期”列转换为日期时间
格式:
# Convert to datetime format
df['Date']=pd.to_datetime(df['Date'])
# Add column for day of year
df['dayofyear'] = df['Date'].dt.dayofyear
df
输出显示已经正确分配了一年中的某一天。
下面是我正在尝试的循环:
for day in df['dayofyear']:
temp = df['TEMP']
row_min = temp.min()
row_max = temp.max()
gdd = (((row_min + row_max) / 2) - 7)
但是,将产生以下错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Input In [83], in <cell line: 15>()
17 row_min = temp.min()
18 row_max = temp.max()
---> 19 gdd = (((row_min + row_max) / 2) - 7)
TypeError: unsupported operand type(s) for /: 'str' and 'int'
如何正确编写此循环?
这里有一种不用for循环的方法
df['Date']=pd.to_datetime(df['Date'])
# Add column for day of year
df['dayofyear'] = df['Date'].dt.dayofyear
df['TEMP'] =df['TEMP'].astype(int)
df['gdd']=df.groupby(['dayofyear'])['TEMP'].transform(
lambda x: ((x.max()+ x.min())/2) * 7 )
df
Date Time TEMP gdd dayofyear
0 2021-01-01 12:00:00 AM 3 45.5 1
1 2021-01-01 1:00:00 AM 1 45.5 1
2 2021-01-01 2:00:00 AM 12 45.5 1
3 2021-01-02 12:00:00 AM 4 42.0 2
4 2021-01-02 1:00:00 AM 8 42.0 2
5 2021-01-02 2:00:00 AM 7 42.0 2
6 2021-01-03 12:00:00 AM 9 70.0 3
7 2021-01-03 1:00:00 AM 12 70.0 3
8 2021-01-03 2:00:00 AM 8 70.0 3
或者,如果你不想把TEMP转换成int,这里有一种方法
df['Date']=pd.to_datetime(df['Date'])
# Add column for day of year
df['dayofyear'] = df['Date'].dt.dayofyear
# convert the series to int prior to taking the max() or min()
df['gdd']=df.groupby(['dayofyear'])['TEMP'].transform(
lambda x: ((x.astype(int).max()+ x.astype(int).min())/2) * 7 )
df
你想要:
# ensure data in numeric
df['TEMP'] = pd.to_numeric(df['TEMP'])
# group, get min/max and compute transformation in a vectorial way
g = df.groupby('dayofyear')['TEMP']
df['gdd'] = g.transform('max').add(g.transform('min')).div(2).sub(7)
输出:
Date Time TEMP dayofyear gdd
0 2021-01-01 12:00:00 AM 3 1 -0.5
1 2021-01-01 1:00:00 AM 1 1 -0.5
2 2021-01-01 2:00:00 AM 12 1 -0.5
3 2021-01-02 12:00:00 AM 4 2 -1.0
4 2021-01-02 1:00:00 AM 8 2 -1.0
5 2021-01-02 2:00:00 AM 7 2 -1.0
6 2021-01-03 12:00:00 AM 9 3 3.0
7 2021-01-03 1:00:00 AM 12 3 3.0
8 2021-01-03 2:00:00 AM 8 3 3.0
我想要一个循环,检查当前的月,12个月在未来和4个月在过去。
问题内容: 如果我有这样的表: 我可以在Qlik中提出5个唯一的hID。我该如何在Python中使用Pandas数据框?还是一个numpy数组?同样,如果这样做,我将在Qlik中得到8。在大熊猫中做这件事的等效方法是什么? 问题答案: 计算不同的值,使用: 仅计算非空值,请使用: 计算包括空值在内的总值,请使用属性: 使用布尔索引: 或使用: 输出:
问题内容: 如何使用javascript从1-366计算一年中的某一天?例如: 1月3日 应该是 3 月3 日 。 2月1日 应该是 32 。 问题答案: 在OP的编辑之后: 编辑:上面的代码会失败时,是3月26日和10月29日之间的日期的时间是凌晨1点之前(如零时59分59秒)。这是因为该代码未考虑夏令时。
我需要在每个循环中生成唯一的id,而不是"城市选择" 我如何在这里生成它? 我需要一些像这样的ID: 输出:
我的数据如下: 我想计算每个小组自上一个日期以来每年经过的天数。当我尝试这样做时,输出不是对数据进行分组。例如,输出会将组 B 2019-07-15 和组 A 2019-08-21 之间的天数计算为负值,而不是计算自每个日期 WITHIN 组以来经过的天数。 我尝试了以下代码,这导致了我在上面描述的问题: 提前谢谢!
考虑 我想计算一个尾随5天的总和,每3天。 我期待着像这样的东西 来自评论 我想要一个解决方案,泛化处理一个指定频率的回顾,并抓住任何属于该回顾。 对于上面的示例,回溯是,可能有4或50个观察结果属于回溯范围。