天道酬勤,学无止境

pandas

Pandas 数据框:查找值从 x 变为 y 的位置(Pandas dataframe: Find location where value changes from x to y)

问题 我试图在数据框中找到数据达到最大值的点,保持一段时间,然后再次下降(见下图)。 我试图找到该值首先达到最大值的位置以及它首先离开它的位置的索引。 我已经通过以下方式尝试过。 ent = data.loc[data['ESC_Command'] == 1600 and data['ESC_Command'].shift() < 1600] lve = data.loc[data['ESC_Command'] == 1600 and data['ESC_Command'].shift(-1) < 1600] 但是当我运行它时,我收到以下错误。 ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 如果我运行 'equals to 1600' 或 '< 1600' 与移位我得到预期的布尔列表,但添加一个逻辑语句让我得到那个错误。 不要以为有人可以阐明我所缺少的东西吗? 提前致谢! 回答1 您将需要使用按位运算符 ( & ) 来组合您的掩码 ( (data['ESC_Command'] == 1600) & (data['ESC_Command'].shift() < 1600) )。 and是逻辑运算符,无法比较系列

2021-10-26 02:10:37    分类:技术分享    python   pandas   dataframe

Python: Applying a function to DataFrame taking input from the new calculated column

Im facing a problem with applying a function to a DataFrame (to model a solar collector based on annual hourly weather data) Suppose I have the following (simplified) DataFrame: df2: A B C 0 11 13 5 1 6 7 4 2 8 3 6 3 4 8 7 4 0 1 7 Now I have defined a function that takes all rows as input to create a new column called D, but I want the function to also take the last calculated value of D (except of course for the first row as no value for D is calculated) as input. def Funct(x): D = x['A']+x['B']+x['C']+(x-1)['D'] I know that the function above is not working, but it gives an idea of what I

2021-10-26 01:08:41    分类:问答    python   pandas

将参数传递给rolling_apply(Passing arguments to rolling_apply)

问题 我需要将几个参数传递给 pd.rolling_apply 的目标函数 我的目标函数如下所示: def complexFunction(i,j,k,l,verbosity=False): ... return 0.0 参数是位置性的吗? 什么是规范方式? 回答1 根据文档(您已链接),您可以使用args关键字来传递参数,第一个参数将由rolling_apply ,您可以将其余参数定义为元组并将其传递给args关键字参数. 例子 - pd.rolling_apply(df,<window>,complexFunction,args=(j,k,l)) 示例/演示 - In [3]: df = pd.DataFrame([[1,2,3],[4,5,6]],columns = ['A','B','C']) In [8]: def func(i,j,s): ...: print(i,j,s) ...: print('next') ...: return i ...: In [9]: pd.rolling_apply(df,1,func,args=(1,2)) [ 1.] 1 2 next [ 4.] 1 2 next [ 2.] 1 2 next [ 5.] 1 2 next [ 3.] 1 2 next [ 6.] 1 2 next 回答2 我通常让我的函数将一行作为其单一输入,例如。

2021-10-26 00:01:33    分类:技术分享    python   pandas

无法平均 Pandas DataFrame 中的特定行(Trouble averaging specific rows in Pandas DataFrame)

问题 我目前有以下两个数据帧: 原始数据= Time F1 F2 F3 2082-05-03 00:00:59.961599999 -83.769997 29.430000 29.400000 2082-05-03 00:02:00.009600000 -84.209999 28.940001 28.870001 2082-05-03 00:02:59.971200000 -84.339996 28.280001 28.320000 outage_by_timeofday_num = (由 raw_data 制成)(忽略破折号 - 它们仅用于对齐) F1 F2 F3 Time 2082-05-03 00:00:00 0 1 1 2082-05-03 01:00:00 0 1 1 我已经能够使用以下代码(如下)按一天中的时间对 raw_data DataFrame 进行排序和平均,但我无法对 outage_by_timeofday_num DataFrame 执行相同的操作: 这有效: raw_data = pd.read_excel(r'/Users/linnk .... raw_data[u'Time']= pd.to_datetime(raw_data['Time'], unit='d') raw_data.set_index(pd.DatetimeIndex(raw_data

2021-10-26 00:00:57    分类:技术分享    python   datetime   pandas   dataframe   average

迭代追加json并在Python中另存为数据帧(Iterate append json and save as dataframe in Python)

问题 我想从这里的链接中迭代和提取表,然后连接或附加它们以保存为数据帧。 我使用了循环迭代表,但我不确定如何将所有json或dataframe附加到一个中? 任何人都可以帮忙吗? 谢谢你。 from requests import post import json import pandas as pd import numpy as np headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36", "Referer": "http://zjj.sz.gov.cn/projreg/public/jgys/jgysList.jsp"} dfs = [] #dfs = pd.DataFrame() for page in range(0, 5): data = {"limit": 100, "offset": page * 100, "pageNumber": page + 1} json_arr = requests.post("http://zjj.sz.gov.cn/projreg/public/jgys/webService

2021-10-25 23:56:03    分类:技术分享    json   python-3.x   pandas   dataframe

Dash 回溯不会导致我的代码中的任何行(Dash traceback not leading to any line in my code)

问题 我正在开发我的第一个 Dash 应用程序。 我收到以下错误: "Cannot set a frame with no defined index " 问题是回溯不会导致我的代码中的任何行。 它只通过已安装的库: Traceback (most recent call last): File "C:\Users\LIAG8802\Documents\Procurement_analytics\venv\lib\site-packages\pandas\core\frame.py", line 3540, in _ensure_valid_index value = Series(value) File "C:\Users\LIAG8802\Documents\Procurement_analytics\venv\lib\site-packages\pandas\core\series.py", line 316, in __init__ data = SingleBlockManager(data, index, fastpath=True) File "C:\Users\LIAG8802\Documents\Procurement_analytics\venv\lib\site-packages\pandas\core\internals\managers.py", line

2021-10-25 23:50:58    分类:技术分享    python   pandas   plotly-dash

pandas.DataFrame.copy(deep=True) 实际上并没有创建深拷贝 [重复](pandas.DataFrame.copy(deep=True) doesn't actually create deep copy [duplicate])

问题 这个问题在这里已经有了答案: Pandas 数据框和字典的深层副本1 个回答去年关闭。 我已经用 pd.Series 和 pd.DataFrame 试验了一段时间,但遇到了一些奇怪的问题。 假设我有以下 pd.DataFrame: df = pd.DataFrame({'col':[[1,2,3]]}) 请注意,此数据框包含包含列表的列。 我想修改此数据框的副本并返回其修改后的版本,以便初始版本保持不变。 为简单起见,假设我想在其单元格中添加整数“4”。 我试过以下代码: def modify(df): dfc = df.copy(deep=True) dfc['col'].iloc[0].append(4) return dfc modify(df) print(df) 问题是,除了新的副本dfc ,初始的 DataFrame df也被修改了。 为什么? 我应该怎么做才能防止修改初始数据帧? 我的熊猫版本是 0.25.0 回答1 从这里的文档,在注释部分: 当 deep=True 时,会复制数据,但不会递归复制实际的 Python 对象,只会复制对对象的引用。 这与标准库中的 copy.deepcopy 形成对比,后者递归复制对象数据(参见下面的示例)。 在 GitHub 上的这个问题中再次引用了这一点,其中开发人员声明: 将可变对象嵌入到 a. DataFrame

2021-10-25 23:47:28    分类:技术分享    python   pandas   list   dataframe   copy

将数据附加到数据框,但在特定列数后更改行(Appending data to a dataframe but changing rows after certain # of columns)

问题 这是我编写的代码,它创建了 3 个变量的一些增量,用于 p 值计算,其中三个变量是 loc 值或指标或任何数字的含义: i = 0 k = 2 j = 2 result = [] df = pd.DataFrame() while j < data.shape[1]: tstat, data_stat = ttest_ind_from_stats(data.loc[i][k], data.loc[i + 1][k], data.loc[i + 2][k], data.loc[i][j], data.loc[i + 1][j], data.loc[i + 2][j]) result.append([data_stat]) j+=1 if j == 8: j = 2 i = i + 3 if i == data.shape[0]: k = k + 1 i = 0 if k > 7: break data_result = pd.DataFrame(result) 其中data.shape[0] = 150和data.shape[1] = 8 。 此代码创建正确的 p 值,但作为 1800 行 x 1 列数据框。 但是,我想打破生成的 df 以便代码生成六个不同的数据帧,每个数据帧都有data.shape[1]-2列数(所以 6 列)。 一些示例截图: 1)来自我当前代码的data

2021-10-25 23:44:03    分类:技术分享    python   pandas   dataframe

如何矢量化使用数据帧的行和列元素的函数(How to vectorize a function that uses both row and column elements of a dataframe)

问题 我在一个数据框中有两个输入,我需要创建一个输出,该输出取决于两个输入(同一行、不同列),而且还取决于其前一个值(同一列、前一行)。 此数据框命令将创建一个我需要的示例: df=pd.DataFrame([[0,0,0], [0,1,0], [0,0,0], [1,1,1], [0,1,1], [0,1,1], [0,0,0], [0,1,0], [0,1,0], [1,1,1], [1,1,1], [0,1,1], [0,1,1], [1,1,1], [0,1,1], [0,1,1], [0,0,0], [0,1,0]], columns=['input_1', 'input_2', 'output']) 规则很简单: 如果 input_1 为 1,则输出为 1(input_1 为触发函数) 只要 input_2 也是 1,输出将保持为 1。(input_2 的工作方式有点像记忆函数) 对于所有其他人,输出将为 0 行按时间顺序排列,我的意思是,第 0 行输出影响第 1 行输出,第 1 行输出影响第 2 行输出,依此类推。 所以输出取决于 input_1、input_2,但也取决于它自己以前的值。 我可以编码它循环遍历数据帧,使用 iloc 计算和分配值,但它非常缓慢。 我需要为数万个数据帧运行数千行,因此我正在寻找最有效的方法(最好是矢量化)。 它可以使用 numpy

2021-10-25 23:41:12    分类:技术分享    python   pandas   numpy   vectorization

检查熊猫数据帧的最后一行是否满足条件的最佳方法是什么?(What is the best way to check if the last rows of a pandas dataframe meet a condition?)

问题 我在尝试创建一个新列时遇到了困难,该列是基于“信号”列的检查列。 如果最后五行(包括最后一行)为 1,则返回 1,如果最后五行(包括最后一行)为 0,则返回 0,其他都为 check 的最后一个值,如下所示: 我有以下数据框: signal index 0 1 1 1 2 1 3 1 4 1 5 1 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 1 14 0 15 1 16 1 17 1 18 1 19 1 我想要这样的东西: signal check index 0 1 1 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 0 1 7 0 1 8 0 1 9 0 1 10 0 0 11 0 0 12 0 0 13 1 0 14 0 0 15 1 0 16 1 0 17 1 0 18 1 0 19 1 1 我将不胜感激任何形式的帮助! 谢谢! 回答1 尝试rolling.sum来切片df和ffill , bfill df['check'] = df[df.rolling(5).sum().isin([0, 5])].ffill().bfill() Out[540]: signal check index 0 1 1.0 1 1 1.0 2 1 1.0 3 1 1.0 4 1 1.0 5 1 1.0 6 0 1.0 7 0 1.0 8 0 1

2021-10-25 23:37:55    分类:技术分享    python   pandas   dataframe