Python Can';在进行日时映射时旋转时不进行排序

Python Can';在进行日时映射时旋转时不进行排序,python,database,pandas,timestamp,Python,Database,Pandas,Timestamp,我正试着这样记录时间 df['day-hour'] = ('Day' + (df['hour'] // 24).add(1).astype(str) + ' - ' + (df['hour'] % 24).astype(str)) day-hour Day1 - 10 Day6 - 3 Day9 - 14 Day21 - 9 customer_id 1 1

我正试着这样记录时间

df['day-hour'] = ('Day' + (df['hour'] // 24).add(1).astype(str) +
              ' - ' + (df['hour'] % 24).astype(str))
day-hour               Day1 - 10   Day6 - 3   Day9 - 14   Day21 - 9
customer_id
1                              1          1           0           1
2                              0          0           1           0
因此,结果将是

customer_id  hour   day-hour
1              10   Day1 - 10
1             123   Day6 - 3
1             489   Day21 - 9
2             230   Day9 - 14
然后我尝试对df.groupby(['customer\u id','day-hour']).size()进行分组
df.groupby(['customer\u id','day-hour']).size().unstack(fill\u value=0)

结果是

day-hour               Day1 - 10   Day6 - 3   Day21 - 9   Day9 - 14
customer_id
1                              1          1           1           0
2                              0          0           0           1
我期望的输出按实际天数排序,如下所示

df['day-hour'] = ('Day' + (df['hour'] // 24).add(1).astype(str) +
              ' - ' + (df['hour'] % 24).astype(str))
day-hour               Day1 - 10   Day6 - 3   Day9 - 14   Day21 - 9
customer_id
1                              1          1           0           1
2                              0          0           1           0

我应该更改哪些代码?

有两种可能的解决方案-在注释中添加指向@Zero的零:

df['day-hour'] = ('Day' + (df['hour'] // 24).add(1).astype(str).str.zfill(2) +
              ' - ' + (df['hour'] % 24).astype(str).str.zfill(2) )
或按以下方式排序:

可读性更好:

def f(x):
    a = x.split(' - ')
    return (int(a[0][3:]), int(a[1]))

df = df[sorted(df.columns, key=f)]
print (df)
   Day1 - 10  Day6 - 3  Day9 - 14  Day21 - 9
1          1         1          0          1
2          0         0          1          0

有两种可能的解决方案-在注释中添加指向@Zero的零:

df['day-hour'] = ('Day' + (df['hour'] // 24).add(1).astype(str).str.zfill(2) +
              ' - ' + (df['hour'] % 24).astype(str).str.zfill(2) )
或按以下方式排序:

可读性更好:

def f(x):
    a = x.split(' - ')
    return (int(a[0][3:]), int(a[1]))

df = df[sorted(df.columns, key=f)]
print (df)
   Day1 - 10  Day6 - 3  Day9 - 14  Day21 - 9
1          1         1          0          1
2          0         0          1          0

df['day-hour']=['day{:02}-{}格式(*x)对于zip中的x((df.hour//24.add(1),df.hour%24)]
有效吗?一旦你有了字符串,这些字符串将被使用…@Zero,你的答案有效,发布为答案非常有效
df['day-hour']=['day{:02}-{}。格式(*x)对于zip中的x((df.hour//24.add(1),df.hour%24)]
工作?只要你有字符串,就会使用…@Zero,你的答案工作,发布为答案很好