python - 用新数据填充 Panda DF
问题描述
这是我在 StackOverflow 上的第一篇文章。如果我做错了什么或违反了网络规则,我深表歉意。我的问题:我有一个pandas
在 python 中使用的 csv 文件。数据框有五列,名为[yday, wday, time, stop, N]
:
yday
是年份,从 1 到 365;
wday
是星期几,从 1 到 7;
time
是一个从 1 到 144 的数字(我将一天分成 10 分钟的间隔,每天 1440 分钟/10 分钟 = 144);
stop
是公交车站的编号(1-4);
N
是进入公共汽车的人数
好吧,我想为每个间隙输入一个条目,每天提供 144 行,但我有一些缺失的间隙,如您所见: CSV 示例
我的目标是添加新行以填补所有时间空白,例如添加(基于给定的图像):
320,6,81,1,1 <-- Exists
320,6,82,1,na <-- New
320,6,83,1,na <-- New
320,6,84,1,na <-- New
320,6,85,1,1 <-- Exists
我试图索引我DataFrame
的,df.set_index['stop','yday','time']
以便我可以用 to 的值重新索引它,'time'
但它不起作用。我是 Python 新手,我很生气试图解决这个问题。1
144
在此先感谢并为我的英语感到抱歉。
解决方案
为长代码道歉。但它解决了你的目的:
#Specify the input csv file path here. I am assuming your csv has only
#the columns and column names you mentioned in your question. If not you have to
#modify the below code to reflect your changed columns
df = pd.read_csv("Path_to_your_input_csv_file_here")
df = df.sort_values(['yday', 'wday', 'time'], ascending=True) #Sort df values based upon yday, wday and time first
df = df.reset_index(drop=True) #Reset the indices after sorting
df2 = df.copy(deep=True) #Make a deep copy of this sorted dataframe
#The below for loop iterates through rows of 'df', finds differences between time values and adds up missing rows to 'df2'
for index, row in df.iterrows(): #Iterate through the rows of df
if index == len(df)-1:
break
else:
if row["yday"] == df.loc[index+1,"yday"] and row["wday"] == df.loc[index+1,"wday"] and row["time"] < df.loc[index+1,"time"]:
differences = list(range(row["time"]+1,df.loc[index+1,"time"]))
for item in differences:
tempdf = pd.DataFrame([[row["yday"], row["wday"],item, row['stop'], 'NA' ]],columns = df2.columns)
df2 = df2.append(tempdf)
#Now sort 'df2' based upon yday,wday and time
df2 = df2.sort_values(['yday', 'wday', 'time'], ascending=True)
df2 = df2.reset_index(drop=True) #Reset indices
print(df2)
输出:
yday wday time stop N
0 320 6 81 1 1
1 320 6 82 1 NA
2 320 6 83 1 NA
3 320 6 84 1 NA
4 320 6 85 1 1
5 320 6 86 1 NA
6 320 6 87 1 NA
7 320 6 88 1 NA
8 320 6 89 1 1
9 320 6 90 1 NA
10 320 6 91 1 NA
11 320 6 92 1 NA
12 320 6 93 1 1
13 320 6 94 1 NA
14 320 6 95 1 NA
15 320 6 96 1 NA
16 320 6 97 1 1
干杯!
推荐阅读
- sql-server - 如何在spring boot + mssql数据库中访问多个不同数据库的数据?
- go - 如何创建嵌套字典来发布数据?
- google-bigquery - 在 BigQuery 上使用 dbt 的增量模型首次运行重复记录
- json - 如何在 Apache Druid 中将 Json 列表摄取到单独的行中
- visual-studio - 如何使用 SSRS 中的表达式获取前 2 个国家/地区的名称(基于它们在表中出现的次数)
- javascript - 使用 javascript get 方法从服务器恢复我的压缩文件
- azure - 在同一个应用服务计划实例上托管多个 Docker 映像实例
- rest - 无法在 Tableau 中查看数据源
- outlook - 对于测试 Office-js Outlook 加载项,是否存在针对所有不同常见最终用户目标的支持服务?[例如 Outlook 的浏览器截图?]
- c# - 如何提供 ILogger
来自.net核心控制器的新类对象中的实例?