Python 使用一组字符串对熊猫系列重新编制索引将删除该系列中的原始数据
我有一个名为day_counts的系列,它通常包含7个值,但看起来像这样。0对应于星期一到星期天6Python 使用一组字符串对熊猫系列重新编制索引将删除该系列中的原始数据,python,pandas,Python,Pandas,我有一个名为day_counts的系列,它通常包含7个值,但看起来像这样。0对应于星期一到星期天6 Name: dow, dtype: int64 0 332 1 722 2 721 但是,索引需要有7个值长(对于一周中的几天),因此我重新为序列编制索引,但使用字符串列表作为索引。代码如下所示(scrobbles是从csv文件读取的数据帧): 这将创建新索引,但任何现有数据都会被0覆盖,并输出以下内容: Mon 0 Tue 0 Wed 0 Thu 0
Name: dow, dtype: int64
0 332
1 722
2 721
但是,索引需要有7个值长(对于一周中的几天),因此我重新为序列编制索引,但使用字符串列表作为索引。代码如下所示(scrobbles是从csv文件读取的数据帧):
这将创建新索引,但任何现有数据都会被0覆盖,并输出以下内容:
Mon 0
Tue 0
Wed 0
Thu 0
Fri 0
Sat 0
Sun 0
Name: dow, dtype: int64
应该是这样的
Mon 332
Tue 722
Wed 721
Thu 0
Fri 0
Sat 0
Sun 0
有人知道我如何保存现有数据吗
有趣的是,如果我将索引设置为像这样的数字new\u index=[0,1,2,3,4,5,6]
然后它会按预期工作
谢谢
只需确保初始数据帧的长度与新索引的长度相同即可。但正如你在帖子的开头所说;它通常包含7个值,因此无需担心。我通过创建字典并将工作日列表压缩到初始系列,然后从字典创建数据帧来解决这个问题
hour_counts = _scrobbles['dow'].value_counts().sort_index()
days = 'Mon Tue Wed Thu Fri Sat Sun'.split()
df = pd.DataFrame(list(dict(zip(days, hour_counts)).items()), columns=['Month', 'Count'])
我假设你有:
,例如day\u计数
pd.系列([33272721])
new_index=[周一、周二、周三、周四、周五、周六、周日]
dc = pd.Series(7 * [0])
然后用天计数更新它
:
dc.update(day_counts)
结果是,您有一个包含7项的系列,初始项
从天开始计算
,剩余项目=0
然后只需将dc
中的索引替换为new\u索引
:
dc.index = new_index
结果是:
Mon 332
Tue 722
Wed 721
Thu 0
Fri 0
Sat 0
Sun 0
Mon 1
Tue 0
Wed 0
Thu 0
Fri 0
Sat 2
Sun 1
编辑
请在下面找到整个问题的一个稍微改变的解决方案,
基于groupby
,即使没有任何辅助表和更新:
import pandas as pd
# Source data
df = pd.DataFrame([ '2018-12-01', '2018-12-02', '2018-12-03', '2018-12-01' ],
columns=['text_timestamp'])
# Change dates from string to datetime
df.text_timestamp = pd.to_datetime(df.text_timestamp)
# Add dow column
df['dow'] = df.text_timestamp.dt.dayofweek
# Compute day counts
day_counts = df.groupby('dow')['text_timestamp'].count()\
.reindex(range(0, 7), fill_value=0)
# Change index
day_counts.index = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
对于上述数据,结果为:
Mon 332
Tue 722
Wed 721
Thu 0
Fri 0
Sat 0
Sun 0
Mon 1
Tue 0
Wed 0
Thu 0
Fri 0
Sat 2
Sun 1
在你的日子里,零代表“星期一”是什么?旧指数和新指数之间的对应关系是什么?请提供道琼斯指数是如何创建的。是的,很抱歉,0是周一到6日,即周日。例如,如果我重新编制指数,但只是使用一个数字列表,数据保持在正确的位置,即正确的工作日,所有其他设置为0,还包括道琼斯指数创建、更新的完整代码,我相信它与数字一起工作,因为熊猫知道新指数和旧指数之间的对应关系,使用周日名称与0、1、2没有对应关系…嗯,我想这是有道理的,是否仍有保持该对应关系的方法?例如,set_索引将起作用,除非在没有7个数据集的情况下。谢谢你,我已经测试过了,这也起作用,但是我将保留我在下面发布的方法,因为它现在按照我的意愿工作