python - 通过一行和每个列名迭代数据框并为 bkoeh-heatmap 填充新数据框
问题描述
我已经使用 pd.read_csv 读取了一个 csv 文件,并创建了一个新的数据框,其中第一列中的采样时间和位置名称作为以下列名称。现在我想根据采样时间和位置名称填写 csv_read 中的值。
read_csv 数据帧(df):
Index Location Description .... Sample Time ... Value
0 Location_1_100 .... 2018-12-13 00:30:00 ... 0.45
1 Location_1_101 .... 2018-12-13 00:30:00 .... 0.33
准备填充数据框(主):
Index Sample Time Location_1_100 Location_1_101 ...
0 2018-12-13 00:30:00 Value from df Value from df
1 2018-12-13 01:00:00 Value from df Value from df
import csv
import numpy as np
import pandas as pd
df = pd.read_csv(remove_bom('file.csv'), parse_dates=['Sample Time'])
df['Sample Time'] = df['Sample Time'].dt.round('30min')
sensoren = df.drop_duplicates('Location Description')
master = pd.DataFrame(data={'Sample Time':df['Sample Time']})
master = master.drop_duplicates()
master = master.reindex(columns=master.columns.tolist()+sensoren['Location Description'].tolist())
for ind, column in enumerate(master.columns[1:]):
master[column][ind]=df.loc[(df['Location Description'] == column)&(df['Sample Time'] == master['Sample Time'][ind])
此代码应在 master 中填充来自 df 的值,但它仅填充第一个位置的第一个采样时间、第二个位置的第二个采样时间等。
我还尝试了一些嵌套的 for 循环,但由于我是 python 新手,所以我没有按预期工作。
解决方案
我用这段代码解决了这个问题:
i=0
#Put columns in list
columns=master.columns.tolist()
#Delete "Sample Time"
del columns[0]
#Remove strange indices
master=master.reset_index(drop=True)
#Iterate through columns
for y in columns:
#Iterate through times
for x in master.loc[:,'Sample Time']:
#Check if a value was found (needed for iloc)
if not ((df.loc[(df['Location Description'] == y)&(df['Sample Time'] == x), 'Value']).empty):
#Copy value to master, if there are multiple values take the first
master.loc[i,y]=(df.loc[(df['Location Description'] == y)&(df['Sample Time'] == x), 'Value']).iloc[0]
#Delete used row in df to improve performance
df=df.drop(df.index[(df['Location Description'] == y)&(df['Sample Time'] == x)])
i+=1
#Reset index when moving to next column
i=0
它有效,但我遇到了很大的性能问题。它运行了几个小时,但不会完成。
推荐阅读
- reactjs - 当我切换到另一个标签时,视频上传停止
- python - 使用 Google 距离矩阵 api 时的“departure_time”参数无效
- java - 我得到 java.lang.ClassCastException:com.sun.xml.ws.client.sei.SEIStub 无法转换为 org.apache.cxf.frontend.ClientProxy java 客户端
- flutter - 如何在 initState 中使用 materialApp 上下文
- excel - 在 excel 2019 中使用标准进行文本连接
- llvm - 如何重新洗牌llvm中的数组访问?
- android - custom_marker_icon >=0.2.0,版本解析失败
- android - 有没有办法知道哪个应用在 Android 上打开了移动数据?
- flutter - 如何扩展文本按钮?
- python - 在 Django 中加载静态文件时出错