Pandas 对条形图进行分组和重采样:

2024-02-06

我有一个数据框,以高时间频率(

为了计算平均浓度,我必须对每日和每月数据应用质量控制过滤器。

我的方法是首先应用过滤器并每年重新采样,然后按位置和年份进行分组。

另外,在所有位置(在标题为“位置”的列中)中,我只需选择几行。因此,我对原始数据框进行切片并使用选定的行创建一个新的数据框。

我无法使用以下代码实现此目的:

date=df['date']
location = df['location']
df.date = pd.to_datetime(df.date)
year=df.date.dt.year
df=df.set_index(date)


df['Year'] = df['date'].map(lambda x: x.year )

#Location name selection/correction in each city:
#Changing all stations:
df['location'] = df['location'].map(lambda x: "M" if x == "mm" else x)

#New dataframe:
df_new = df[(df['location'].isin(['K', 'L', 'M']))]


#Data filtering:
df_new = df_new[df_new['value'] >= 0]

df_new.drop(df_new[df_new['value'] > 400].index, inplace = True)

df_new.drop(df_new[df_new['value'] <2].index, inplace = True)

diurnal = df_new[df_new['value']].resample('12h')

diurnal_mean = diurnal.mean()[diurnal.count() >= 9]

daily_mean=diurnal_mean.resample('d').mean()

df_month=daily_mean.resample('m').mean()

df_yearly=df_month[df_month['value']].resample('y')

#For plotting:

df_grouped = df_new.groupby(['location', 'Year']).agg({'value':'sum'}).reset_index()

sns.barplot(x='location',y='value',hue='Year',data= df_grouped)

这是出现的众多错误之一:

"None of [Float64Index([22.73, 64.81,  8.67, 19.98, 33.12, 37.81, 39.87, 42.29, 37.81,\n              36.51,\n              ...\n               11.0,  40.0,  23.0,  80.0,  50.0,  60.0,  40.0,  80.0,  80.0,\n               17.0],\n             dtype='float64', length=63846)] are in the [columns]"
ERROR:root:Invalid alias: The name clear can't be aliased because it is another magic command.

这是一个示例数据框,显示了我需要绘制的内容;理想情况下,值列应代表执行质量控制操作和重新采样后的重新采样值。

Unnamed: 0 location  value  \
date                                    location          value                                                                         
2017-10-21 08:45:00+05:30        8335    M                339.3   
2017-08-18 17:45:00+05:30        8344    M                 45.1   
2017-11-08 13:15:00+05:30        8347    L                594.4   
2017-10-21 13:15:00+05:30        8659    N                189.9   
2017-08-18 15:45:00+05:30        8662    N                 46.5   

这就是选择所选位置后实际数据的一部分应该是什么样子。我是新用户,因此无法附上我需要的图表的屏幕截图。此查询是我之前发布的查询的扩展,附加要求绘制重新采样的数据而不是简单的值计数。多年来的迭代将不同的组值绘制为 pandas 中的条形图 https://stackoverflow.com/questions/59868638/iteration-over-years-to-plot-different-group-values-as-bar-plot-in-pandas

任何帮助都感激不尽。


从根本上讲,您的错误是由于这种不明确的索引而产生的,您在其中传递一列的连续浮点值以按行选择当前为日期时间类型的索引。

df_new[df_new['value']]           # INDEXING DATETIME USING FLOAT VALUES
...
df_month[df_month['value']]       # COLUMN value DOES NOT EXIST

可能您想选择该列value(在其他中)在重采样期间。

diurnal = df_new['value'].resample('12h')

diurnal.mean()[diurnal.count() >= 9]

daily_mean = diurnal_mean.resample('d').mean()    
df_month = daily_mean.resample('m').mean()       # REMOVE value BEING UNDERLYING SERIES
df_yearly = df_month.resample('y')                

然而,上面的任何地方你都没有保留location用于绘图。因此,代替resample, use groupby(pd.Grouper(...))

# AGGREGATE TO KEEP LOCATION AND 12h
diurnal = (df_new.groupby(["location", pd.Grouper(freq='12h')])["value"]
                 .agg(["count", "mean"])
                 .reset_index().set_index(['date'])
           )
# FILTER
diurnal_sub = diurnal[diurnal["count"] >= 9]

# MULTIPLE DATE TIME LEVEL MEANS
daily_mean = diurnal_sub.groupby(["location", pd.Grouper(freq='d')])["mean"].mean()
df_month = diurnal_sub.groupby(["location", pd.Grouper(freq='m')])["mean"].mean()
df_yearly = diurnal_sub.groupby(["location", pd.Grouper(freq='y')])["mean"].mean()

print(df_yearly)

用随机、可重复的数据进行演示:

Data

import numpy as np
import pandas as pd

import matplotlib.pyplot as plt
import seaborn as sns

np.random.seed(242020)
random_df = pd.DataFrame({'date': (np.random.choice(pd.date_range('2017-01-01', '2019-12-31'), 5000) + 
                                   pd.to_timedelta(np.random.randint(60*60, 60*60*24, 5000), unit='s')),
                          'location': np.random.choice(list("KLM"), 5000),
                          'value': np.random.uniform(10, 1000, 5000)                          
                         })

聚合

loc_list = list("KLM")

# NEW DATA FRAME WITH DATA FILTERING
df = (random_df.set_index(random_df['date'])
               .assign(Year = lambda x: x['date'].dt.year,
                       location = lambda x: x['location'].where(x["location"] != "mm", "M"))
               .query('(location == @loc_list) and (value >= 2 and value <= 400)')
      )

# 12h AGGREGATION
diurnal = (df_new.groupby(["location", pd.Grouper(freq='12h')])["value"]
                 .agg(["count", "mean"])
                 .reset_index().set_index(['date'])
                 .query("count >= 2")
          )


# d, m, y AGGREGATION
daily_mean = diurnal.groupby(["location", pd.Grouper(freq='d')])["mean"].mean()
df_month = diurnal.groupby(["location", pd.Grouper(freq='m')])["mean"].mean()
df_yearly = (diurnal.groupby(["location", pd.Grouper(freq='y')])["mean"].mean()
                    .reset_index()
                    .assign(Year = lambda x: x["date"].dt.year)
            )

print(df_yearly)
#   location       date        mean  Year
# 0        K 2017-12-31  188.984592  2017
# 1        K 2018-12-31  199.521702  2018
# 2        K 2019-12-31  216.497268  2019
# 3        L 2017-12-31  214.347873  2017
# 4        L 2018-12-31  199.232711  2018
# 5        L 2019-12-31  177.689221  2019
# 6        M 2017-12-31  222.412711  2017
# 7        M 2018-12-31  241.597977  2018
# 8        M 2019-12-31  215.554228  2019

Plotting

sns.set()
fig, axs = plt.subplots(figsize=(12,5))
sns.barplot(x='location', y='mean', hue='Year', data= df_yearly, ax=axs)

plt.title("Location Value Yearly Aggregation", weight="bold", size=16)
plt.show()
plt.clf()
plt.close()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas 对条形图进行分组和重采样: 的相关文章

  • 如何在单元测试中模拟 subprocess.call

    我使用的是 python 3 3 我必须测试一个使用的方法call来自 subprocess py I tried subprocess call MagicMock with patch subprocess call as TU cal
  • ModuleNotFoundError:没有名为“bs4”的模块

    当我尝试像这样导入 BeautifulSoup 时 from bs4 import BeautifulSoup 当我运行我的代码时 我收到此错误消息 ModuleNotFoundError No module named bs4 如果有人知
  • 将 Pandas TimeDelta 转换为整数

    假设我有一个包含 TimeDelta 数据的 Pandas Series 事实上 它是通过将 DateTimeIndex 与其自身的移位版本进行差值生成的 从而给出了连续时间戳之间的增量 它看起来像 timestamp 2015 02 01
  • Django Rest Framework——没有名为rest_framework的模块

    我已经使用安装了 django rest 框架pip install djangorestframework但当我运行 python3 manage py sycndb 时 我仍然收到此错误 导入错误 没有名为 rest framework
  • 如何使用 PyCharm 运行 Pylint

    我想将 Pylint 配置为我正在处理的 Python 项目的整个项目目录中的外部工具 我尝试将存储库用作模块 init py没有的话 这两种方式都不起作用 我在设置 Pylint 与 PyCharm 一起运行时遇到困难 我知道我应该将它作
  • 如何处理 pandas.read_csv 中的元数据行?

    我有一个 txt 文件 其中包含元数据标题 后跟 csv 样式的实际数据 数据包含带逗号的浮点数 像这样 title someTitle date 20 0 2019 col str1 str2 str3 2 49 42 01 0 50 5
  • 将字符串转换为字典,然后访问键:值???如何访问 Python 中的数据?

    我在访问字典内的数据时遇到问题 系统 Macbook 2012Python Python 3 5 1 Continuum Analytics Inc 我正在与一个dask dataframe http dask pydata org en
  • pandas 中的滚动减法

    我正在尝试做类似的事情 ff pd DataFrame uid 1 1 1 20 20 20 4 4 4 date 09 06 10 06 11 06 09 06 10 06 11 06 09 06 10 06 11 06 balance
  • 如何调整 Seaborn 箱线图中胡须的大小?

    我想在下面的箱线图中使须线更宽 import pandas as pd import numpy as np import seaborn as sns import matplotlib pyplot as plt data pd Dat
  • 如何将同一行中以逗号分隔的值拆分到R中的不同行

    我有一些数据来自谷歌表格 https forms gle rGQQL3tvA1PrE4dD8我想拆分以逗号分隔的答案 and 复制参与者的 ID 数据如下 gt head data names Q2 Q3 Q4 1 PART 1 fruit
  • 在 Pandas 中,如何从基于另一个数据框的数据框中删除行?

    我有 2 个数据框 一个名为 USERS 另一个名为 EXCLUDE 他们都有一个名为 电子邮件 的字段 基本上 我想删除 USERS 中包含 EXCLUDE 中包含电子邮件的每一行 我该怎么做 您可以使用boolean indexing
  • 如何使用 Bokeh 动态隐藏字形和图例项

    我正在尝试在散景中实现复选框 其中每个复选框应显示 隐藏与其关联的行 我知道可以通过图例来实现这一点 但我希望这种效果同时在两个图中发生 此外 图例也应该更新 在下面的示例中 出现了复选框 但不执行任何操作 我显然不明白如何更新用作源的数据
  • 合并数据框而不重复行

    我想合并两个数据框 但如果有多个匹配项 则不想重复行 相反 我想总结一下那天的观察结果 来自 合并 提取两个数据框中与指定列匹配的行并将其连接在一起 如果有多个匹配项 则所有可能的匹配项各贡献一行 这是一些示例代码 days lt as d
  • 从日期变量创建月末日期

    我有一个包含日期变量的大型数据框 它反映了该月的第一天 有没有一种简单的方法来创建代表该月最后一天的新数据框日期变量 以下是一些示例数据 date start month seq as Date 2012 01 01 length 4 by
  • 父子进程之间的通信

    我正在尝试创建一个具有一个或多个子进程的 Python 3 程序 父进程生成子进程 然后继续处理自己的业务 有时我想向特定的子进程发送一条消息 由其捕获该消息并采取行动 此外 子进程在等待消息时需要处于非锁定状态 它将运行自己的循环来维护服
  • 如何在 pandas 中读取并标准化以下 json?

    我在 stackoverflow 中使用 pandas 看到了很多 json 读取问题 但我仍然无法解决这个简单的问题 Data session id 0 X061RFWB06K9V 1 5AZ2X2A9BHH5U unix timesta
  • Pandas Groupby:如何使用两个 lambda 函数?

    我目前可以在 Pandas 中执行以下操作 但 FutureWarning 严厉地摇动着我的手指 grpd df groupby rank agg mean np mean meian np median min np min max np
  • 使用 python requests 模块时出现 HTTP 503 错误

    我正在尝试发出 HTTP 请求 但当前可以从 Firefox 浏览器访问的网站响应 503 错误 代码本身非常简单 在网上搜索一番后我添加了user Agent请求参数 但也没有帮助 有人能解释一下如何消除这个 503 错误吗 顺便说一句
  • 如何使用 Pandas、Numpy 加速 Python 中的嵌套 for 循环逻辑?

    我想检查一下表的字段是否TestProject包含了Client端传入的参数 嵌套for循环很丑陋 有什么高效简单的方法来实现吗 非常感谢您的任何建议 def test parameter a list parameter b list g
  • 根据列 value_counts 过滤数据框(pandas)

    我是第一次尝试熊猫 我有一个包含两列的数据框 user id and string 每个 user id 可能有多个字符串 因此会多次出现在数据帧中 我想从中导出另一个数据框 一个只有那些user ids列出至少有 2 个或更多string

随机推荐

  • 如何将 ZonedDateTime 转换为日期?

    我正在尝试在我的数据库中设置一个与服务器无关的日期时间 我相信这样做的最佳实践是设置 UTC 日期时间 我的数据库服务器是 Cassandra Java 的数据库驱动程序仅理解日期类型 因此 假设在我的代码中我现在使用新的 Java 8 Z
  • iwlist() 命令如何扫描无线网络?

    我想知道 iwlist 命令如何在 Linux 中扫描可用的无线网络 我阅读了它的源代码 发现有一个 ioctl 调用 使用 SIOCSIWSCAN 来触发扫描 并使用 SIOCGIWSCAN 来获取扫描结果 但是这些系统调用如何捕获和分析
  • 在 JBoss 中使用多重登录模块

    我是身份验证和安全领域的新手 我正在尝试扩展我的应用程序的身份验证机制 该机制当前提供传统的用户名 密码身份验证 以提供用户通过 LDAP 服务器进行身份验证 在当前的实现中 应用程序使用j 安全检查来自服务器 API 的线程对用户进行身份
  • _CDSnapshot_[entityName]_ 的多个实例

    我看到数以千计的实例CD快照 entityName 使用 instruments 来跟踪未引用的分配时 这是什么 我认为它与 CoreData 相关 是的 这与核心数据有关 我相信这是可以预料的 请参阅我的回复 NSManagedObjec
  • 一个用户的 Python 模块导入错误,但另一个用户没有错误

    这有效 root host usr bin python26 script py Success 这会导致错误 user host usr bin python26 script py ImportError No module named
  • 从 pypi 进行 pip install 可以,但从 testpypi 失败(找不到需求)

    我正在尝试创建我的第一个 python 包 为了不搞砸整个交易 我一直在尝试将其上传到 testpypi 服务器 这似乎很顺利 sdist 创建并上传没有显示任何错误 但是 当我尝试将其安装到新的 virtualenv 时https tes
  • wxPython 最好的实时绘图小部件是什么?

    我想使用 Python 和 wxPython 显示一个包含一条或两条曲线 每秒最多 50 个样本的实时图表 该小部件应支持 Win32 和 Linux 平台 欢迎任何提示 编辑添加 我不需要以 50 fps 更新显示 但需要在两条曲线上显示
  • 文件夹未显示在存储桶存储中

    所以我的问题是安装时有一些文件没有显示在 gcsfuse 中 如果我使用 gsutils ls 我会在在线控制台中看到它们 另外 如果我在存储桶中手动创建文件夹 我就可以看到其中的文件 但我需要先创建它 有什么建议么 gs mybucket
  • 如何在 Spring Boot 中将 Cookie 设置为安全标志

    我正在研究 Spring Boot 完全不知道它是如何工作的 在验证登录时 JSESSIONID 被创建为 cookie 登录代码如下 protected void configure HttpSecurity http throws Ex
  • Linq to SQL Int16 在 SQL 命令中转换为 Int32

    通过方法参数 Int16 id 以及 Linq to SQL where 子句 where id HasValue m Id id 数据上下文中条件的结果命令文本是 从可视化工具 SELECT t0 Id t0 Name t0 IsActi
  • System.UnauthorizedAccessException:创建 COM 组件的实例失败,并出现错误 80070005 (C#)

    我在使用 C NET 命令行应用程序时遇到问题 其主要思想是使用 COM 对象从其他程序获取数据 当手动执行或作为 Node js 服务器内的子进程运行时 它工作正常 但是当整个项目作为 Windows 服务安装时 C 应用程序会响应以下错
  • 如何在单独的文件中创建命名查询

    我需要将所有命名查询保存在一个单独的文件中 例如 javax persistence NamedQueries NamedQuery name Employee findAll query SELECT e FROM Employee e
  • web.config 中与 targetFramework 相关的配置错误

    我在 Visual Studio 2015 中制作了一个 MVC 网站 它可以在我的本地主机上运行 但是当我发布我的网站并放入我的主机时 它不起作用 它给了我这个错误通知 应用程序中的服务器错误 配置错误 解析器错误消息 targetFra
  • FFmpeg 使用 URL 进行文件转换

    我需要将 MP4 转换为 AVI MP4 视频上传到 Windows Azure Blob 存储中 并且存储可公开访问 当我们编写 ffmpeg 命令行时我的问题 我可以提供 Blob 存储中视频的 URL吗 ffmpeg ihttps a
  • 用于重试同一请求的 HTTP 状态码

    是否有 HTTP 状态代码来指示客户端再次执行相同的请求 我面临着服务器在处理请求时必须 等待 锁消失的情况 但当锁消失时 请求可能会接近其超时限制 因此 一旦锁定清除 我想指示客户端再次执行相同的请求 我想出的最好的办法是使用 HTTP
  • Angular 将特定数据检索到 $scope 变量中不起作用

    我这里初始化 scope statuses 然后 如果我只是将 http get 中的数据设置为 scope 变量 那么 有效 但我需要对其进行更多过滤 scope statuses result data Devices console
  • 如何在c99中使用ftruncate而不发出警告

    我想在我的代码中使用 ftruncate 函数 我必须使用选项 std c99 进行编译 我收到警告 In function test warning implicit declaration of function ftruncate W
  • 将 gtfs 实时数据流式传输为人类可读的格式

    我正在尝试使用 Java 下载可读的 gtfs 实时数据 协议缓冲区格式 以便我可以在文本文件中查看它 我尝试了几种方法 方法 1 URL url new URL uri byte buffer new byte 4096 InputStr
  • JavaScript 评估问题

    var x 5 function f y return x y 2 function g h var x 7 return h x var x 10 z g f 我正在解决课堂上教科书上的一些问题 为下一次考试做准备 但无法弄清楚上述内容如
  • Pandas 对条形图进行分组和重采样:

    我有一个数据框 以高时间频率 为了计算平均浓度 我必须对每日和每月数据应用质量控制过滤器 我的方法是首先应用过滤器并每年重新采样 然后按位置和年份进行分组 另外 在所有位置 在标题为 位置 的列中 中 我只需选择几行 因此 我对原始数据框进