Python 3.x 如何遍历数据集的整行并填充附加列?

Python 3.x 如何遍历数据集的整行并填充附加列?,python-3.x,pandas,datetime,for-loop,pandas-groupby,Python 3.x,Pandas,Datetime,For Loop,Pandas Groupby,我是python的初学者。我希望遍历数据集的整行,并适当地填充下面的列。我需要使用从数据集的第一行开始的for循环,并在所有行中执行相同的过程。你能给我足够的指令用for循环写代码吗 date #0 2016-01-01 05:00:00 #1 2016-01-01 06:00:00 #2 2016-01-01 07:00:00 #3 2016-01-01 08:00:00 #4 2016-01-01 09:00:00 #5 2016-01-01 10:00:00 #6 2016-

我是python的初学者。我希望遍历数据集的整行,并适当地填充下面的列。我需要使用从数据集的第一行开始的for循环,并在所有行中执行相同的过程。你能给我足够的指令用for循环写代码吗

date
#0  2016-01-01 05:00:00
#1  2016-01-01 06:00:00
#2  2016-01-01 07:00:00
#3  2016-01-01 08:00:00
#4  2016-01-01 09:00:00
#5  2016-01-01 10:00:00
#6  2016-01-01 11:00:00
#7  2016-01-01 12:00:00
#8  2016-01-01 13:00:00
#9  2016-01-01 14:00:00
#10 2016-01-01 15:00:00
#11 2016-01-01 16:00:00
#12 2016-01-01 17:00:00
#13 2016-01-01 18:00:00
#14 2016-01-01 19:00:00
#15 2016-01-01 20:00:00
#16 2016-01-01 21:00:00
#17 2016-01-01 22:00:00
#18 2016-01-01 23:00:00
#19 2016-01-02 00:00:00
#20 2016-01-02 01:00:00
#21 2016-01-02 02:00:00
#22 2016-01-02 03:00:00
#23 2016-01-02 04:00:00
#24 2016-01-02 05:00:00
#25 2016-01-02 06:00:00
#26 2016-01-02 07:00:00
#27 2016-01-02 08:00:00
#28 2016-01-02 09:00:00
#29 2016-01-02 10:00:00
#30 2016-01-02 11:00:00
#31 2016-01-02 12:00:00
#32 2016-01-02 13:00:00
#33 2016-01-02 14:00:00
#34 2016-01-02 15:00:00
#35 2016-01-02 16:00:00
#36 2016-01-02 17:00:00
#37 2016-01-02 18:00:00
#38 2016-01-02 19:00:00
#39 2016-01-02 20:00:00
#40 2016-01-02 21:00:00
#41 2016-01-02 22:00:00
#42 2016-01-02 23:00:00
#43 2016-01-03 00:00:00
#44 2016-01-03 01:00:00
#45 2016-01-03 02:00:00
#46 2016-01-03 03:00:00
#47 2016-01-03 04:00:00
#48 2016-01-03 05:00:00
#49 2016-01-03 06:00:00
#50 2016-01-03 07:00:00
#51 2016-01-03 08:00:00
#52 2016-01-03 09:00:00
#53 2016-01-03 10:00:00
#54 2016-01-03 11:00:00
#55 2016-01-03 12:00:00
#56 2016-01-03 13:00:00
#57 2016-01-03 14:00:00
#58 2016-01-03 15:00:00
#59 2016-01-03 16:00:00
#60 2016-01-03 17:00:00
#61 2016-01-03 18:00:00
#62 2016-01-03 19:00:00
#63 2016-01-03 20:00:00
#64 2016-01-03 21:00:00
#65 2016-01-03 22:00:00
#66 2016-01-03 23:00:00



 #Column name
    #day1
    #day2
    #day3
    #day4
    #day5
    #day6
    #day7

    i=0
    date_cell = dataset['date'][i]

    day_cell = date_cell.dayofweek
    dataset.iloc[i,day_cell] = 1

您不需要/不想在此处使用for循环,而是可以使用get_dummies并将结果连接回原始数据帧,例如:

首先是:

import pandas as pd

df = pd.DataFrame({'date': pd.date_range('2016-01-01 05:00:00', end='2016-01-03 23:00:00', freq='1H')})
在dayofweek datetime访问器上应用pd.get_dummies并重新索引列,以确保所有7天都以列的形式存在,而不管该天是否在您的日期中,用0填充缺少的任何内容,在列名中添加前缀并连接回原始DF:

new_df = df.join(
    pd.get_dummies(df['date'].dt.dayofweek + 1)
    .reindex(range(1, 8), axis=1, fill_value=0)
    .add_prefix('day')
)
给你:

                  date  day1  day2  day3  day4  day5  day6  day7
0  2016-01-01 05:00:00     0     0     0     0     1     0     0
1  2016-01-01 06:00:00     0     0     0     0     1     0     0
2  2016-01-01 07:00:00     0     0     0     0     1     0     0
3  2016-01-01 08:00:00     0     0     0     0     1     0     0
4  2016-01-01 09:00:00     0     0     0     0     1     0     0
..                 ...   ...   ...   ...   ...   ...   ...   ...
62 2016-01-03 19:00:00     0     0     0     0     0     0     1
63 2016-01-03 20:00:00     0     0     0     0     0     0     1
64 2016-01-03 21:00:00     0     0     0     0     0     0     1
65 2016-01-03 22:00:00     0     0     0     0     0     0     1
66 2016-01-03 23:00:00     0     0     0     0     0     0     1
如果绝对必须使用不推荐的for循环,则可以在一个循环中将列初始化为0,然后在date列上循环,并在一周中的该天将该行的day列更新为1,例如:

for n in range(1, 8):
    df.loc[:, f'day{n}'] = 0
for idx, date in df['date'].iteritems():
    df.loc[idx, f'day{date.dayofweek + 1}'] = 1

欢迎来到SO!请检查并做一些研究。具体来说,您能否澄清:您希望有一个带有“日期”列的熊猫数据框?这些数据来自哪里?您可以使用哪种格式?谢谢您的回复。是的,这是熊猫数据报,“日期”列包含在此数据集中。在那之后,我又增加了7列,即第1天、第2天、第3天等等。@Mr.Asif您是否总是需要这7列,而不管使用哪一天?例如。。。你的例子实际上只有3天…是的。但是我的日期栏太大了。大约8398行。由于这个原因,我在这里没有提到完整的专栏,非常感谢。谢谢你的友好回复。但是如果我想使用for循环,那么我应该怎么做?@Mr.Asif您有什么特别的理由坚持for循环吗?这绝对不是必需的,而且是一个非常反熊猫的习语……事实上,我想学习。这就是为什么我对for_loop非常感兴趣的原因。你能帮我学习一下吗?你对for循环一般熟悉吗?如果不是的话,我建议在没有熊猫的情况下学习,因为在实践中这样做真的很糟糕。。。对于您试图解决的问题,您将学到一种不正确的方法。@Mr.Asif更新为包含for循环。。。只是不要在任何严肃的代码中使用它: