如何重新索引列名(1,4,6)以包含额外的数字?(1,2,3,4,5,6)

2024-06-01 22:17:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个多索引数据框,显示电子邮件发送的时间和天数。这是通过pandaspivot_table()创建的

列名是小时数。指数是一天。值是发送的电子邮件数:

df

是否可以重新索引列以包含所有小时?从0到23。这会增加nans的数量,但没关系。我不希望邮件在周日凌晨1点发送

我尝试使用reindex(),首先创建一组新的列:

新栏目。这是一个从023的列表

new_hours = [i for i in range(0,24)]

print(new_hours)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]

现在我将尝试重新编制索引,但得到一个值错误:

df_rides_day_hour3 = df_rides_day_hour3.reindex(labels=detailed_hours, axis=1)

ValueError: Buffer dtype mismatch, expected 'Python object' but got 'long long'

我曾尝试使用level参数,但没有帮助

如果您需要数据帧,我已经在这里使用df.to_dict()粘贴了它:https://pastecode.xyz/view/b5f45b52

皮科表代码day_sent'只是日期字符串的名称hour sent是整数is_sent是所有的{}

df_rides_day_hour3 = pd.pivot_table(df[['day_sent', 'hour_sent', 'is_sent']], index=['day_sent', 'hour_sent'], aggfunc='count')

Tags: 数据dfnewis时间tablelongsent
1条回答
网友
1楼 · 发布于 2024-06-01 22:17:59

我认为您的代码不起作用,因为MultiIndex列中只有一个第一级is_sent。因此,可以通过^{}将其删除:

df_rides_day_hour3 = (df_rides_day_hour3.droplevel(0,axis=1)
                                        .reindex(labels=range(24), axis=1))

或者,您可以通过更改pivot_table来避免MulitIndex

df_rides_day_hour3 = pd.pivot_table(df, 
                                    index=['day_sent', 'hour_sent'],
                                    columns='is_sent',
                                    aggfunc='size')
df_rides_day_hour3 = df_rides_day_hour3.reindex(labels=range(24), axis=1)

相关问题 更多 >