[英]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.