gpt4 book ai didi

python - 如何在 pandas 数据框中设置第二个?

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

我使用 Python 从 CSV 导入数据。我想仅使用时间变量计算每行和每列的平均值。但问题是该值不是以秒为单位。

如何将相关变量声明为时间(秒)而不是数值?

这是我的数据

--------------------------
|Responses|Time 1 | Time 2 | Time 3|
| abc |20 | 30 | 40 |
| bce |23 | 25 | 30 |
| cde |34 | 40 | 20 |

所以,我想计算每个响应的总时间

df.sum(axis = 1)
abc 90
bce 78
cde 92

df.sum(axis = 0)
Time 1 76
Time 2 95
Time 3 90

但实际上我想要在几分钟内完成,即

df.sum(axis = 0)
Time 1 1:16
Time 2 1:35
Time 3 1:30

或者可以是 1 分 16 秒之类的。有谁知道怎么做吗?

最佳答案

你的问题没有明确定义。您应该按照 jezrael 评论中的建议遵循说明。

正如你所说的“或者它可以是 1 分 16 秒之类的。”,我假设输出可以只是一个字符串。

如果您希望结果为:

  • 1:16,使用 to_months_seconds(x)
  • 1 分 16 秒,使用 to_months_seconds_text(x)
from datetime import timedelta

def to_minutes_seconds(x):
# x is the current value to process, for example 76
td = timedelta(seconds=x)

# split x into 3 variables: hours, minutes and seconds
hours, remainder = divmod(td.seconds, 3600)
minutes, seconds = divmod(remainder, 60)

# return the required format, minutes:seconds
return "{}:{}".format(minutes, seconds)


def to_minutes_seconds_text(x):
td = timedelta(seconds=x)
hours, remainder = divmod(td.seconds, 3600)
minutes, seconds = divmod(remainder, 60)

if minutes > 1:
m = 'minutes'
else:
m = 'minute'

if seconds > 1:
s = 'seconds'
else:
s = 'second'

return "{} {} {} {}".format(minutes, m, seconds, s)


# Create the input dictionary
df = pd.DataFrame.from_dict({'Responses': [76, 95, 90, 781]})

# Change the total seconds into the required format
df['Time'] = df['Responses'].apply(to_minutes_seconds)
df['Text'] = df['Responses'].apply(to_minutes_seconds_text)
print(df)

输出:

   Responses  Time                 Text
0 76 1:16 1 minute 16 seconds
1 95 1:35 1 minute 35 seconds
2 90 1:30 1 minute 30 seconds
3 781 13:1 13 minutes 1 second

关于python - 如何在 pandas 数据框中设置第二个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59528163/

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