首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >白天映射时不能一边旋转一边排序

白天映射时不能一边旋转一边排序
EN

Stack Overflow用户
提问于 2018-06-28 10:33:58
回答 1查看 19关注 0票数 0

我正试着给时间贴上这样的标签

代码语言:javascript
复制
df['day-hour'] = ('Day' + (df['hour'] // 24).add(1).astype(str) +
              ' - ' + (df['hour'] % 24).astype(str))

所以,结果是

代码语言:javascript
复制
customer_id  hour   day-hour
1              10   Day1 - 10
1             123   Day6 - 3
1             489   Day21 - 9
2             230   Day9 - 14

然后我尝试对df.groupby(['customer_id','day-hour']).size().unstack(fill_value=0)进行分组

结果是

代码语言:javascript
复制
day-hour               Day1 - 10   Day6 - 3   Day21 - 9   Day9 - 14
customer_id
1                              1          1           1           0
2                              0          0           0           1

我所期望的输出按实际天数排序,如下所示

代码语言:javascript
复制
day-hour               Day1 - 10   Day6 - 3   Day9 - 14   Day21 - 9
customer_id
1                              1          1           0           1
2                              0          0           1           0

我该改什么代码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-28 10:43:00

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

代码语言:javascript
复制
df['day-hour'] = ('Day' + (df['hour'] // 24).add(1).astype(str).str.zfill(2) +
              ' - ' + (df['hour'] % 24).astype(str).str.zfill(2) )

或按custom function with 2 fields排序

代码语言:javascript
复制
df = df[sorted(df.columns,key=lambda x: (int(x.split(' - ')[0][3:]), int(x.split(' - ')[1])))]

更具可读性:

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51080695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档