【问题标题】:How to set second in pandas dataframe?如何在熊猫数据框中设置第二个?
【发布时间】:2019-12-30 09:05:51
【问题描述】:

我使用 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 秒之类的。有人知道怎么做吗?

【问题讨论】:

  • 欢迎来到 StackOverflow。请花时间阅读how to provide a great pandas example 上的这篇文章以及如何提供minimal, complete, and verifiable example 并相应地修改您的问题。 how to ask a good question 上的这些提示也可能有用。
  • 嗨@farahamiramh,我的以下回答是否回答了您的问题?或者还有什么不清楚的地方吗?我只是想知道为什么这张票仍然开放:-)
  • 嗨@RomainCapron。你确实回答了我的问题。但我想知道是否有任何简单的方法可以做到。但没关系。抱歉,我不知道如何关闭这张票。
  • 嗨@farahamiramh,如果您的问题得到解答,请投票并接受最有帮助的答案。您可以通过单击答案旁边的灰色复选标记将其切换为绿色来做到这一点。

标签: python pandas time type-conversion


【解决方案1】:

你的问题没有很好的定义。您应该按照 jezrael 在 cmets 中的建议进行操作。

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

如果您希望结果为:

  • 1:16,使用 to_minutes_seconds(x)
  • 1 分 16 秒,使用 to_minutes_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

【讨论】:

    猜你喜欢
    • 2015-02-02
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    • 2018-02-28
    • 2020-12-08
    • 2019-06-16
    • 1970-01-01
    • 2021-08-08
    相关资源
    最近更新 更多