gpt4 book ai didi

Python/pandas - 将条件小时转换为分钟

转载 作者:行者123 更新时间:2023-12-01 03:21:32 25 4
gpt4 key购买 nike

我有一些工作代码可以将小时转换为分钟(以小时值为条件),但我目前正在迭代数据帧行,这对于较大的数据帧来说似乎不太有效

我有 2 个 pandas 系列(实际上这些是较大数据框的列):

hours = pd.Series([0,10,15,20,30])
mins = pd.Series([10,0,0,20,10])

我想做的是:

  • 返回包含总持续时间(以分钟为单位)的单个系列(即将小时转换为分钟,然后添加到分钟值)
  • 如果小时值为 15、30、45、60 或 90,则不进行时分转换,直接将其与分钟值相加,然后将小时设置为 0。否则,将小时转换为分钟,然后进行相加<

我期望输出为以下系列(注意索引 2 和 4):

0      10.0
1 600.0
2 15.0
3 1220.0
4 40.0

我编写了以下函数来实现我想要的:

def convert_time(hours, minutes):
df_duration = pd.DataFrame({"hours": hours, "minutes": minutes}).astype(float)
series_converted = pd.Series()

# Replace nan with zero
df_duration = df_duration.fillna(0)

# Convert out of bound hour values, add to minutes
for i in range(df_duration.shape[0]):
if df_duration.iloc[i]["hours"] in (15,30,45,60,90):
cur_hours = 0
cur_mins = df_duration.iloc[i]["hours"] + df_duration.iloc[i]["minutes"]
else:
cur_hours = df_duration.iloc[i]["hours"]
cur_mins = df_duration.iloc[i]["minutes"]

series_converted.set_value(i,(cur_hours * 60) + cur_mins)

return series_converted

在 Pandas 中执行此操作而不迭代数据帧行的正确方法是什么?我似乎无法弄清楚当涉及条件时如何在两列中使用 pandas 屏蔽

最佳答案

您可以将 whereisin 一起使用,仅在值不在所需值列表中时执行转换,然后您可以 fillna 正常运行:

In [134]:
(hours.where(~hours.isin([15,30,45,60,90])) * 60 + mins).fillna(hours + mins)

Out[134]:
0 10.0
1 600.0
2 15.0
3 1220.0
4 40.0
dtype: float64

你可以看到这个分解:

In [135]:   
hours.isin([15,30,45,60,90])

Out[135]:
0 False
1 False
2 True
3 False
4 True
dtype: bool

In [136]:
~hours.isin([15,30,45,60,90])

Out[136]:
0 True
1 True
2 False
3 True
4 False
dtype: bool

In [138]:
hours.where(~hours.isin([15,30,45,60,90]))

Out[138]:
0 0.0
1 10.0
2 NaN
3 20.0
4 NaN
dtype: float64

In [139]:
(hours.where(~hours.isin([15,30,45,60,90])) * 60 + mins)

Out[139]:
0 10.0
1 600.0
2 NaN
3 1220.0
4 NaN
dtype: float64

关于Python/pandas - 将条件小时转换为分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41872215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com