问题标签 [pandas-apply]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Pandas split-apply-combine,为什么在排序时结合 pd.concat([df]) 起作用?
我使用 pandas 进行拆分应用合并类型的工作流。“应用”部分返回一个DataFrame
. 当我运行的 DataFrame 第gropupby
一次排序时,只需返回 a DataFrame
from apply
raises ValueError: cannot reindex from a duplicate axis
。相反,当我返回时,我发现它可以正常工作pd.concat([df])
(而不仅仅是return df
)。如果我不对 进行排序DataFrame
,则两种合并结果的方式都可以正常工作。我希望排序必须对索引做一些事情,但我不明白是什么。有人可以解释一下吗?
python - 链接 groupby 并应用 pandas
我正在寻找一种链接 groupby 并应用的方法,如下所示(参见下面的代码以获取具体示例):
我猜它不起作用,因为 groupby 需要输入一个数据帧,这并不总是上面第二个 groupby 的情况(可以输入一个系列,cf 示例)。一个解决方案可能是让第一个应用输出 func_1 的结果加上原始数据帧,但我还没有找到如何做到这一点。
我正在寻找一个通用的解决方法,而不仅仅是这个特定示例的解决方法。
示例:假设我想为 b 中的每个组计算 a 的路缘下面积,然后计算 c 中每个组的这些面积的总和。
非常感谢任何帮助!
python - 在 pandas groupby DataFrame 中创建异常值列
我有一个非常大的 pandas DataFrame,其中包含数千个代码以及与每个代码相关的成本(示例):
我groupby
在级别创建一个对象code
,即:
现在我真的需要在这个grouped
DataFrame 中添加一个新列,以确定具有异常成本的代码的百分比。我最初的方法是这个外部函数(使用iqr
from scipy
):
编写完这个函数后,我在上面添加is_outlier
了我的agg
论点groupby
。这不起作用,因为我正在尝试为系列is_outlier
中的每个元素评估此比率cost
:
我尝试使用pd.Series.where
,但它没有与np.where
. 有没有办法修改我的is_outlier
函数,该函数必须将cost
系列作为参数才能正确评估每个代码的异常值率?还是我完全偏离了道路?
更新期望结果(减去此示例的最低观察要求):
注意:为了让我计算异常值,我的样本很糟糕,因为我分别有 2、1 和 4 个观察值code
。在生产数据框中,每个代码都有成百上千的观察结果,每个观察结果都与成本相关。在上面的示例结果中,平均值的值is_outlier
意味着,对于'a'
两个观察值中的一个在异常值范围内的成本,对于'c'
四个观察值中的一个在异常值范围内的成本,等等 - 我正在尝试重新创建这个在我的函数中,通过分配 1 和 0 作为结果np.where()
并取.mean()
那个
.apply(pd.Series)
需要为了转换<pandas.core.groupby.SeriesGroupBy object> resulting from
groupbyinto a DataFrame.
的is a pandas Series with all values of
成本for each
代码, as generated from the
groupby operation (
split phase of
split-apply-combine`)
python - How to add leading 0's to different values in same column in pandas?
I have a column that has values of length 5,6,8, or 9. The column should just have values of length 6 or 9. I need to add leading 0's if the value is of length 5 or 8.
There is another column which can identfy if the value should be 6 or 9 digits (indicator). An indicator value of 'Red' means 6 digits, and an indicator of 'Green' means 9 digits.
expected result:
I am getting an error of ValueError: Unknown format code 'd' for object of type 'float'
. Any ideas why? What did I miss?
python - 使用多列的 Pandas groupby 函数
这类似于以下内容,但是我想进一步提出一个问题: pandas groupby apply on multiple columns to generate a new column
我有这个数据框:
这个函数同时使用了我想应用于每个“组”的“比率”和“部分”列:
请注意,我的函数与我在顶部提到的问题中显示的函数之间的区别在于,我的函数返回整个组的值数组而不是单个值。我尝试了以下方法:
这些数字是正确的。但是,我需要输出是一个系列,我可以将其分配回原始数据帧,以便它看起来像这样:
我该怎么做呢?使用的是正确的方法吗?
python - 将自定义函数应用于 Pandas 数据框中的多列并在一列中返回输出
我正在将此 Excel 公式转换为 Pandas 和 Python。
这会将值返回到数据框中的列中。
我已将 raw_data 转换为数据框。我已经在定义的函数中用 Python 编写了我的逻辑。
我应该如何将该函数一次应用于多列的原始数据框?我做不到——
由于我必须逐列垂直向下移动,因此我使用的是axis = 0。
编辑
为了更清晰,将 Excel 代码写入 Python 逻辑,与 BX/BY/BZ 一起使用的数字(即 3)只是表明该公式适用于一列中的一个单元格,因此列中的值会下降对应 BX/BY/BZ -3 变化为 BX4,BX5,BX6.../BY4,BY5,BY6 等等。
因为在这里我必须垂直查看数据,所以我使用axis = 0,因为我需要在 column 中执行所有行值。
主要问题是我应该如何在这里使用“应用”与这么多不同的列。我是否也需要将列作为参数结束?
逻辑是——
我还将 raw_df 和 df 转换为 numpyarray
python - 用不同的值填充 DataFrame 的一列的每一行(随机分布)
我有一个带 aprox 的 DataFrame。4 列和 200 行。我创建了带有空值的第 5 列:
然后,我想用随机逆对数正常值填充这个新列的每一行。生成 1 个逆对数 normal 的代码:
注意:如果下面的代码运行多次,由于里面的值,它会生成一个新的结果ppf()
:random.random()
当我这样做时发生的事情是它用相同的 number填充所有 200 行df['minutes']
,而不是像我预期的那样触发random.random()
每一行。
我需要做什么?我尝试使用for loop
,但显然我没有做对(给出相同的结果):
我究竟做错了什么?
inverse log normal
另外,我稍后会补充一点,如果另一列的值为 0 或 1,我需要更改上面的一些参数。如:
提前致谢。
python-3.x - 不要使用 apply() 将项目映射到任何输出
假设我有一个groupby
对象、一个 DataFrame 或其他任何带有apply()
方法的东西。我希望某些元素不映射到任何输出。例如,在我的情况下,我有一个groupby
并且我希望忽略满足特定标准的组。我怎样才能做到这一点?我已经尝试过return None
正在应用的函数,但输出仍然有一个组条目(它是空的,但它仍然存在)。
例如,假设 DataFrame 如下所示:
我想运行df.apply(fn, axis=1)
这样,对于好的行, fn 返回一些输出,对于坏行, fn 告诉 apply “忽略”该行,并且输出没有bad_row
. 在这里,为了便于演示,我使用了 DataFrame 而不是 groupby,但这是相同的想法。
python - 如何聚合特定值的数据框?
我有一个这样的pandas
数据框df
,说
我想返回一个表格,计算一些activity
在精确列表中出现的次数,比如l = [A, B]
在这种情况下,然后
是我需要的。
执行此操作的最快方法是什么?理想情况下没有for
循环
谢谢 !
编辑:我知道有pivot
做这种工作的功能。但就我而言,我的activity
类型比我真正需要在列表中计算的类型要多得多l
。它仍然是最佳使用pivot
吗?
pandas - pandas 应用或聚合
如果我有一个 pandas 数据框 df,以下三种计算列平均值的方法将给出相同的结果:
但是如果我创建一些组,并以类似的方式使用这些方法呢:
...在这个例子中 .mean 和 .aggregate 给出相同的结果,但 .apply 没有。使用 .apply 将返回分组列“A”,作为索引和列(当我遇到这个问题时,这不是我所期望或想要的)
这种行为对我来说似乎不一致,还是我错过了这三种方法之间的一些根本区别?