基于datafram中的1列选择具有最高值的行

2024-03-28 21:19:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一组数据帧,大约有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'])

Tags: 文件csv数据方法代码import标题pandas
1条回答
网友
1楼 · 发布于 2024-03-28 21:19:36

考虑到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

相关问题 更多 >