python - python 细化、平均、舍入数据

标签 python numpy pandas average

我有一个很大的数据集(请参阅下面的示例格式),我需要执行以下操作:

  1. 识别第 1、2、5 列中出现的重复值 - 如果全部重复,那么我需要删除冗余行并对第 8 列中的值进行平均(这对于我将发布的代码来说是成功的 -
  2. 在第一步之后,我想将第 1,2 列的值四舍五入为整数(无小数)
  3. 我想重新引入第 3、4、6 和 7 栏 -
    第 3、6 和 7 列需要有一个我指定的特定值(例如,3 应该全为 0,6 应该全为 1,第 7 列应该全为 1)(类似于输入文件) 根据第 4 列上不同值的数量,第 4 列需要增加 1)(类似于输入文件

这是一个示例输入文件:数据(文件名)

564991.15   7371277.89  0   1   1530    1   1   16.0225
564991.15   7371277.89  0   1   8250    1   1   14.4405
564991.15   7371277.89  0   2   1530    1   1   14.8637
564991.15   7371277.89  0   2   8250    1   1   14.8918
564991.17   7371277.89  0   3   1530    1   1   16.0002
564991.17   7371277.89  0   3   8250    1   1   15.4333
564991.04   7371276.76  0   4   1530    1   1   14.73
564991.04   7371276.76  0   4   8250    1   1   15.6138
564991.04   7371276.76  0   5   1530    1   1   16.2453
564991.04   7371276.76  0   5   8250    1   1   15.6138

这是我所知道的代码(目前我在计算中补充)

import os
import numpy as np
import pandas as pd
datadirectory = '/media/data'
os.chdir = 'datadirectory'
df = pd.read_csv('/media/data/data.dat')
sorted_data = df.groupby(["X.1","X.2","X.5"])["X.8"].mean().reset_index()
tuple_data = [tuple(x) for x in sorted_data.values]
datas = np.asarray(tuple_data)
np.savetxt('sorted_data_rounded.dat', datas, fmt='%s', delimiter='\t')

但是他只给了我 4 列,没有四舍五入的数据....

最佳答案

添加一半并转换 astype 可能会稍微快一些int:

df = pd.read_csv('data.dat', header=None, sep='\s+')

In [2]: df
Out[2]: 
           0           1  2  3     4  5  6        7
0  564991.15  7371277.89  0  1  1530  1  1  16.0225
1  564991.15  7371277.89  0  1  8250  1  1  14.4405
2  564991.15  7371277.89  0  2  1530  1  1  14.8637
3  564991.15  7371277.89  0  2  8250  1  1  14.8918
4  564991.17  7371277.89  0  3  1530  1  1  16.0002
5  564991.17  7371277.89  0  3  8250  1  1  15.4333
6  564991.04  7371276.76  0  4  1530  1  1  14.7300
7  564991.04  7371276.76  0  4  8250  1  1  15.6138
8  564991.04  7371276.76  0  5  1530  1  1  16.2453
9  564991.04  7371276.76  0  5  8250  1  1  15.6138

df1 = df.groupby([0, 1, 4])[7].mean().reset_index()
df1['ints'] = (df1[7] + 0.5).astype(int)

In [5]: df1
Out[5]: 
           0           1     4         7  ints
0  564991.04  7371276.76  1530  15.48765    15
1  564991.04  7371276.76  8250  15.61380    16
2  564991.15  7371277.89  1530  15.44310    15
3  564991.15  7371277.89  8250  14.66615    15
4  564991.17  7371277.89  1530  16.00020    16
5  564991.17  7371277.89  8250  15.43330    15

注意:您可以使用 DataFrame 方法 to_csv 保存 DataFrame .

关于python - python 细化、平均、舍入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14268794/

相关文章:

Python 工厂函数

python - 如何解决Python中的安全问题?

python - SQLAlchemy 在 SQL 中将 float 转换为字符串?

python - matplotlib.pyplot.draw() 和 matplotlib.pyplot.show() 没有效果

python - 在 Python 中排序的最快方法(没有 cython)

python - 求最大腹肌。每组行索引的值,排列最大值。矩阵中对角线的值,根据索引的非对角线值,查找行列式

python - 给定列名称列表,将包含列表的多个列合并为一列

python-3.x - Python pandas to_datetime 工作不一致 : Why are month and day mixed up?

python - 使用 Polars 生成运行记录,其中一个月的期末余额将成为下个月的期初余额

python - 在 DataFrame 中创建新行的最有效方法