【问题标题】:Python - Pandas resample dataframe with strings and floatsPython - Pandas 使用字符串和浮点数重新采样数据帧
【发布时间】:2021-06-26 22:08:10
【问题描述】:

我有一个数据框,其中索引为datetimeindex,每一行都是几年来的每一天。我需要按月对数据框重新采样,其中两个浮点列相加,但字符串列是该月内的所有唯一值。我可以对单个列进行重新采样,但我不知道如何对所有内容进行重新采样,或者如果我一次只做一个,如何将它们重新组合在一起。

对于我正在尝试的花车:

# go through the column list
for col in col_list:
    # process all run time columns for month
    if "float" in str(col):
        # resample for one month and sum
        df[col] = df[col].resample('M').sum()
        # rename the column
        df.rename(columns={col: col + " MONTHLY"}, inplace=True)

对于字符串:

elif "string" in str(col):
    # get all the unique jobs run during the month
    df[col] = df[col].groupby(pd.Grouper(freq='M')).unique()
    df.rename(columns={col: col + " MONTHLY"}, inplace=True)

这些导致每月数据被插入到数据框中,但每天仍然存在,而且很难找到,而不是我需要的。

一些示例数据:

        float_1 float_2 string_1    string_2
12/30/2019  1   2   a   a
12/31/2019  1   3   a   b
1/1/2020    2   4   a   c
1/2/2020    3   5   b   d

预期的输出是:

12/2019 2   5   a    a, b
1/2020  5   9   a, b c, d

不确定是否重要,但真实数据确实在整个数据中随机出现 NaN。

【问题讨论】:

    标签: python pandas datetimeindex


    【解决方案1】:

    分别尝试聚合数字列和非数字列,然后将它们连接回来:

    df.index = pd.to_datetime(df.index)
    
    numerics = df.select_dtypes('number').resample('M').sum()
    strings = df.select_dtypes('object').resample('M').agg(lambda x: ','.join(set(x)))
    
    numerics.join(strings)
    #            float_1  float_2 string_1 string_2
    #2019-12-31        2        5        a      a,b
    #2020-01-31        5        9      a,b      d,c
    

    【讨论】:

    • 效果很好。我不知道为什么,但strings 也返回了数字列,尽管按月组合字符串有效。数字列按预期工作,仅返回按月求和的数字列。这是一个问题,因为当加入所有包含_x_y 列的字符串列时。解决了一个循环来删除包含所有字符串列名称中表示的单词列表的列:strings.drop(list(strings.filter(regex=l)), axis = 1, inplace = True)。真实数据集有约 80 列。谢谢您的帮助!!很好的解决方案。
    • 好的,从上面的评论中发现了我的问题,_x_y 的事情是我的错。您的解决方案完全没有问题。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-09-19
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    • 2021-01-13
    相关资源
    最近更新 更多