【问题标题】:Reindex a dataframe with the index of an other dataframe using the sum to fill the values使用总和来使用其他数据帧的索引重新索引数据帧以填充值
【发布时间】:2021-09-04 17:47:09
【问题描述】:

首先创建具有常规索引的数据框,这是我想使用 df1 的索引重新采样的 df

df0 = pd.DataFrame(index=pd.date_range(start='2018-10-31 00:17:24', periods=50,freq='1s'))

我不知道如何创建具有不规则索引的 df,因此我创建了一个新数据框(我要使用的索引)来重新采样 df0

df1 = pd.DataFrame(index=pd.date_range(start='2018-10-31 00:17:24', periods=50,freq='20s'))

对于最小的可重现示例。创建一个值介于 0 和 1 之间的列

df0['dat'] = np.random.rand(len(df0))

我想查找 dat 列的值大于 0.5 的行

df0['target'] = 0
df0.loc[(df0['dat'] >= 0.5), 'target'] = 1

然后我想使用 df1 的索引重新索引 df0,但列的每一行名为 df0['target'] 应该有该窗口中的值的总和

我试过的是:

new_index     = df1.index 
df_new        = df0.reindex(df0.index.union(new_index)).interpolate(method='linear').reindex(new_index).sum() 

但是这个 sum() 搞砸了一切

【问题讨论】:

    标签: python pandas dataframe group-by reindex


    【解决方案1】:

    IIUC:

    尝试:

    df_new=df0.reindex(df1.index.union(df0.index)).interpolate(method='linear').reset_index()
    

    终于用上了pd.Grouper()groupby()

    out=df_new.groupby(pd.Grouper(key='index',freq='1 min')).sum()
    

    【讨论】:

    • 谢谢!如果 df1 的索引不规则会发生什么。有没有办法在没有特定 freq ='1min' 的情况下完成答案的第二部分?
    • @jokerp 您可以根据需要调整频率.....因为日期不规则,所以您提供了可以分组的内容......您可以按秒分组df_new.groupby(df_new['index'].dt.second).sum() 和分钟 df_new.groupby(df_new['index'].dt.minute).sum()
    • 很抱歉,您的回答似乎不起作用!当我使用您编写的第一行代码时,我得到一个新的数据框,其中目标列的值与以前相同,并且具有第二个数据框的索引。但是我希望第二个索引和列中填充的值是总和
    • @jokerp 第一行取自您的代码...这是您代码的最后一行,但不同之处在于您链接了sum() 方法,而我使用了reset_index() 方法...。顺便说一句更新了答案....删除了第二个 reindex() 方法.....现在检查 :)
    猜你喜欢
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多