python - 通过熊猫数据框循环更新每行的多列
问题描述
我在这里查看了几篇关于循环数据帧的更好方法的帖子,但似乎无法弄清楚如何将它们应用于我的具体情况。
我有一个大约 2M 行的数据框,我需要为每行计算六个统计信息,每列一个。共有 3 列,总共 18 列。但是,问题是我需要使用数据帧的样本更新这些统计信息,以便每行的平均值/中位数等不同。
这是我到目前为止所拥有的:
r = 0
for i in imputed_df.iterrows():
t = imputed_df.sample(n=10)
for (columnName) in cols:
imputed_df.loc[r,columnName + '_mean'] = t[columnName].mean()
imputed_df.loc[r,columnName + '_var'] = t[columnName].var()
imputed_df.loc[r,columnName + '_std'] = t[columnName].std()
imputed_df.loc[r,columnName + '_skew'] = t[columnName].skew()
imputed_df.loc[r,columnName + '_kurt'] = t[columnName].kurt()
imputed_df.loc[r,columnName + '_med'] = t[columnName].median()
但这已经运行了两天没有完成。我试图从原始数据框中获取 2000 行的子集,甚至那个已经运行了几个小时。
有一个更好的方法吗?
编辑:添加了它应该是什么样子的示例数据集。每个后缀列应具有 10 行子集的计算值。
timestamp activityID w2 w3 w4
0 41.21 1.0 -1.34587 9.57245 2.83571
1 41.22 1.0 -1.76211 10.63590 2.59496
2 41.23 1.0 -2.45116 11.09340 2.23671
3 41.24 1.0 -2.42381 11.88590 1.77260
4 41.25 1.0 -2.31581 12.45170 1.50289
解决方案
问题是您使用不必要的循环对每一列进行操作。我们可以使用
DataFrame.agg
withDataFrame.unstack
和Series.set_axis
来获得正确的列名。
设置
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(0, 10, (10, 100))).add_prefix('col')
new_serie = df.agg(['sum', 'mean',
'var', 'std',
'skew', 'kurt', 'median']).unstack()
new_df = pd.concat([df, new_serie.set_axis([f'{x}_{y}'
for x, y in new_serie.index])
.to_frame().T], axis=1)
# if new_df already exist:
#new_df.loc[0, :] = new_serie.set_axis([f'{x}_{y}' for x, y in new_serie.index])
col0 col1 col2 col3 col4 col5 col6 col7 col8 col9 ... \
0 8 7 6 7 6 5 8 7 8 4 ...
1 8 1 8 7 0 8 8 4 6 1 ...
2 5 6 3 5 4 9 3 0 2 5 ...
3 3 3 3 3 5 4 5 1 3 5 ...
4 7 9 4 5 6 7 0 3 4 6 ...
5 0 5 2 0 8 0 3 7 6 5 ...
6 7 0 1 4 8 9 4 9 2 9 ...
7 0 6 1 0 6 1 3 0 3 4 ...
8 3 6 1 8 3 0 7 6 8 6 ...
9 2 5 8 5 8 4 9 1 9 9 ...
col98_skew col98_kurt col98_median col99_sum col99_mean col99_var \
0 0.456435 -0.939607 3.0 39.0 3.9 6.322222
1 NaN NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN
5 NaN NaN NaN NaN NaN NaN
6 NaN NaN NaN NaN NaN NaN
7 NaN NaN NaN NaN NaN NaN
8 NaN NaN NaN NaN NaN NaN
9 NaN NaN NaN NaN NaN NaN
col99_std col99_skew col99_kurt col99_median
0 2.514403 0.402601 1.099343 4.0
1 NaN NaN NaN NaN
2 NaN NaN NaN NaN
3 NaN NaN NaN NaN
4 NaN NaN NaN NaN
5 NaN NaN NaN NaN
6 NaN NaN NaN NaN
7 NaN NaN NaN NaN
8 NaN NaN NaN NaN
9 NaN NaN NaN NaN
推荐阅读
- ios - 如何更改缩进 UItableview 单元格的左边框颜色
- java - 如何使用 XAdES4j 对 xml 进行签名,并引用 URI (#DatosEmision)?
- android - android片段视图即使在onCreateView中初始化后也会抛出空指针异常
- python - ValueError:从文本文件解析列表时出现格式错误的节点或字符串错误
- apache-spark - 根据 PySpark 中的时区将 UTC 时间戳转换为本地时间
- github-actions - 从 git 操作容器推送时,Git 推送操作不起作用
- java - Java最大函数递归
- google-apps-script - 谷歌表格脚本无法识别拆分功能
- database - 制定 MongoDB 查询
- reactjs - TypeError:无法读取未定义的属性“包含” - 成功编译后 chrome 中的错误