python - 将一行中的所有列追加到另一行中

标签 python pandas

我试图将一行中的每一列附加到另一行中,我想对每一行执行此操作,但有些行不会有任何值,看看我的代码,它会更清楚:

这是我的数据

date    day_of_week day_of_month    day_of_year month_of_year
5/1/2017    0   1   121 5
5/2/2017    1   2   122 5
5/3/2017    2   3   123 5
5/4/2017    3   4   124 5
5/8/2017    0   8   128 5
5/9/2017    1   9   129 5
5/10/2017   2   10  130 5
5/11/2017   3   11  131 5
5/12/2017   4   12  132 5
5/15/2017   0   15  135 5
5/16/2017   1   16  136 5
5/17/2017   2   17  137 5
5/18/2017   3   18  138 5
5/19/2017   4   19  139 5
5/23/2017   1   23  143 5
5/24/2017   2   24  144 5
5/25/2017   3   25  145 5
5/26/2017   4   26  146 5

这是我当前的代码:

s = df_md['date'].shift(-1)
df_md['next_calendarday']  = s.mask(s.dt.dayofweek.diff().lt(0))
df_md.set_index('date', inplace=True)
df_md.apply(lambda row: GetNextDayMarketData(row, df_md), axis=1)

def GetNextDayMarketData(row, dataframe):
    if(row['next_calendarday'] is pd.NaT):
        return
    key = row['next_calendarday'].strftime("%Y-%m-%d")
    nextrow = dataframe.loc[key]
    for index, val in nextrow.iteritems():
        if(index != "next_calendarday"):
            dataframe.loc[row.name, index+'_nextday'] = val

这可以工作,但速度太慢,甚至可能无法工作。结果应该是这样的,您可以看到下一行的值已添加到上一行。关键在于它是下一个日历日期,而不仅仅是序列中的下一行。如果某行没有下一个日历日期的条目,则该行将只是空白。

enter image description here

这是 csv 格式的预期结果

date    day_of_week day_of_month    day_of_year month_of_year   next_workingday day_of_week_nextday day_of_month_nextday    day_of_year_nextday month_of_year_nextday
5/1/2017    0   1   121 5   5/2/2017    1   2   122 5
5/2/2017    1   2   122 5   5/3/2017    2   3   123 5
5/3/2017    2   3   123 5   5/4/2017    3   4   124 5
5/4/2017    3   4   124 5                   
5/8/2017    0   8   128 5   5/9/2017    1   9   129 5
5/9/2017    1   9   129 5   5/10/2017   2   10  130 5
5/10/2017   2   10  130 5   5/11/2017   3   11  131 5
5/11/2017   3   11  131 5   5/12/2017   4   12  132 5
5/12/2017   4   12  132 5                   
5/15/2017   0   15  135 5   5/16/2017   1   16  136 5
5/16/2017   1   16  136 5   5/17/2017   2   17  137 5
5/17/2017   2   17  137 5   5/18/2017   3   18  138 5
5/18/2017   3   18  138 5   5/19/2017   4   19  139 5
5/19/2017   4   19  139 5                   
5/23/2017   1   23  143 5   5/24/2017   2   24  144 5
5/24/2017   2   24  144 5   5/25/2017   3   25  145 5
5/25/2017   3   25  145 5   5/26/2017   4   26  146 5
5/26/2017   4   26  146 5                   
5/30/2017   1   30  150 5   

            

最佳答案

使用DataFrame.join删除列next_calendarday_nextday:

df = df.set_index('date')
df = (df.join(df, on='next_calendarday', rsuffix='_nextday')
        .drop('next_calendarday_nextday', axis=1))

关于python - 将一行中的所有列追加到另一行中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67683542/

相关文章:

python - QTableWidget 整数

python - 如何仅在另一个 python 列表中的某个值之后 append 到列表?

python - NLP-词袋分类

python - 如何使用 CDK 部署 aws EventBridge - Python 示例

python - 列中所有字数的 Pandas 总和

python - Django 休息框架在不同文件上记录不同级别

python - 将数据帧行值和列标题打印为字符串

python - 从 url 加载压缩 (.gz) .csv 文件时出现问题

python - 从 2 列创建日期对象

python - 将二维列表(tfidf 结果的密集输出)附加到 pandas 数据帧行中,每个索引