python - 如何在熊猫数据框中创建计算的新列,该计算发生在除计算将进入的行之外的每一行
问题描述
例如,假设我得到了具有系列 A.1 和 A.2 的数据帧 df,如下所示:
A.1 A.2
2 8
3 2
5 1
我想计算让我们说所有其他行的平均值的差异,如下所示:
A.1 A.2 B
2 8 (3+5)/2 - (2+1)/2
3 2 (2+5)/2-(8+1)/2
5 1 (2+3)/2-(8+2)/2
我的代码看起来像这样并且不起作用,我应该如何正确编写它?
df['B'] = mean(df['A.1'].drop(df['B'].index)))-mean(df['A.2'].drop(df['B'].index)))
在处理庞大的数据集时,我必须完全避免循环并以熊猫式的方式进行。
解决方案
尝试:
df.apply(lambda r : df.loc[df.index!=r.name,'A.1'].mean() - df.loc[df.index!=r.name,'A.2'].mean(), axis = 1)
结果集是:
0 2.5
1 -1.0
2 -2.5
dtype: float64
请注意,r.name
内部 lambda 函数只是当前行的索引。
另一种完全没有 lambda 的方法:
(df['A.1'].sum()-df['A.1'])/(len(df)-1) - (df['A.2'].sum()-df['A.2'])/(len(df)-1)
结果和上面一样。
推荐阅读
- google-search-console - iframe 视频加载图像中缺少字段“thumbnailUrl”
- java - Spring MVC Hibernate没有xml使用DriverManagerDataSource如何映射属性
- c# - 起订量设置抛出异常
- php - 多循环中的查询和按最后一个查询的 id 排序
- java - 序列化错误:如何使用使用 java.util.List[String] 的函数创建使用 ArrayType(StringType) 列的 UDF?
- javascript - 确定选择了哪些“子”元素
- python - 打印从函数返回的 DataFrame 的内容
- json - 如何使 mongoDB 子文档具有唯一 id 或递增 id?
- python - 如何从 pandas 系列的 datetime64 dtype 更改所有实例的值
- c - 当进程停止调试时捕获事件