繁体   English   中英

根据数据框中的 1 列选择具有最高值的行

[英]Selecting rows with the highest value based on 1 column in the dataframe

我有一组大约有 20k 行的数据框。 带有标题 X、Y、Z、I、R、G、B。 (是的,它的点云)

我想通过在根据 X 列排序后将数据分组为 100 行来创建多个子数据框。随后我想根据 Y 列对所有子数据框进行排序并将它们进一步分解为 50 行。(分解每个子数据帧进一步向下)最终结果是我应该有一组 50 行的子数据帧,我想挑选出每个子数据帧中 Z 值最高的所有行并将它们写入 CSV 文件。

我已经用我的代码达到了以下方法。 但我不确定如何进一步。

import pandas as pd
headings = ['x', 'y', 'z']
data = pd.read_table('file.csv', sep=',', skiprows=[0], names=headings)

points = data.sort_values(by=['x'])

考虑一个 1000 行的虚拟数据框,

df.head()   # first 5 rows

    X   Y   Z   I   R   G   B
0   6   6   0   3   7   0   2
1   0   8   3   6   5   9   7
2   8   9   7   3   0   4   5
3   9   6   8   5   1   0   0
4   9   0   3   0   9   2   9

首先,从数据框中提取Z最大值,

z_max = df['Z'].max()
df = df.sort_values('X')

# list of dataframes
dfs_X = np.split(df, len(df)/ 100)

results = pd.DataFrame()
for idx, df_x in enumerate(dfs_X):
    dfs_X[idx] = df_x.sort_values('Y')
    dfs_Y = np.split(dfs_X[idx], len(dfs_X[idx]) / 50)
    for idy, df_y in enumerate(dfs_Y):
        rows = df_y[df_y['Z'] == z_max]
        results = results.append(rows)
results.head()

results将包含所有数据帧中具有最高Z值的行。

输出:前 5 行

    X   Y   Z   I   R   G   B
541 0   0   9   0   3   6   2
610 0   2   9   3   0   7   6
133 0   4   9   3   3   9   9
731 0   5   9   5   1   0   2
629 0   5   9   0   9   7   7

现在,使用df.to_csv()将此数据帧写入csv

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM