【问题标题】:Create new column week in no time series dataset在无时间序列数据集中创建新列周
【发布时间】:2018-03-11 18:09:37
【问题描述】:

我正在尝试在我的数据帧上创建一个时间结构。

我有一个数据框,其中有一列名为“day”,df['day'] 的范围从 1 到 365,缺少数字,看起来像

df = pd.DataFrame({'day': [1,2,2,2,3,4,5,5,8,8,9,9,10,11,11,12,13]}) 

我想创建一个新列“weekOftheYear”,以便每 5 天显示一周。生成的数据框应如下所示:

day  week
1     1
2     1
2     1
2     1
3     1  
...   ...
8     2
8     2
9     2
...   ...

提前感谢您的任何提示!

【问题讨论】:

  • 你的尝试是什么?
  • 我正在尝试根据一年中的某一天生成一年中的一周。没有周末。

标签: python pandas reshape pandas-groupby


【解决方案1】:

我认为需要:

df['week'] = (df['day'] + 2) // 7 + 1

【讨论】:

    【解决方案2】:

    我不确定你为什么要每 5 天显示一次你想要显示的内容,但我相信这个解决方案会为你工作。

    df['week'] = df['day'].apply(lambda x: x//7+1)
    

    在 OP 评论后编辑。

    如果 1-4 你想得到 1 和 5-11 2 等等,那么你只需要通过n 移动你所有的日子。

    df = pd.DataFrame({'day': [1,1,2,2,5,5,6,6,6,7,8,8,9,9]})
    df['fixed_days'] = df['day'] + 2
    df['week'] = df['fixed_days'].apply(lambda x: x//7+1)
    df.drop('fixed_days', axis=1, inplace=True)
    df.head()
    

    打印

        day week
    0   1   1
    1   1   1
    2   2   1
    3   2   1
    4   5   2
    

    【讨论】:

    • 此解决方案不适用于我的情况,因为我的“日”列以 1 = 星期四、2 = 星期五开始,然后缺少 3 和 4 并且 5= 星期一。最小的工作示例应该是: df = pd.DataFrame({'day': [1,1,2,2,5,5,6,6,6,7,8,8,9,9]})
    • @MoorZ 我相信它现在可以工作了。如果此解决方案适合您,请将其标记为已解决。
    • @TomWojcik - 是的,它工作,对不起!但最好不要使用apply ;)