如何选择Pandas Dataframe中的行范围



我有一个数据框架(来自一个格式奇怪的Excel文件),它在行中有数据的部分。像这样的例子:

<表类> 名称 Data1 Data2 第一组标头 一些数据 更多数据 First Group Data some Data some Data more Data First Group Data some Data some Data more Data 第二组标头 一些数据 更多数据 第二组数据 一些数据 更多数据 第二组数据 一些数据 更多数据 第二组数据 一些数据 更多数据 第二组数据 一些数据 更多数据 第三组标头 一些数据 更多数据 第二组数据 一些数据 更多数据

我能够使用以下命令将不同的标题分组在一起。如果你愿意的话,它应该允许你添加更多的标题,但确实需要少量的技术债务来保持当前状态(除非有更多的你的表,我看不出你可以更多地工作)。这也假设在不同的组之间没有那条线。如果你这样做,那么我会根据需要简单地使用dropna()删除它们。

import pandas as pd
import numpy as np
header_list = ['First Group Header', 'Second Group Header', 'Third Group Header']
df['GROUPER'] = np.where(df['Name'].isin(header_list), df['Name'], np.nan)
df['GROUPER'] = df['GROUPER'].ffill()

我建议以下解决方案

import pandas as pd
df = pd.DataFrame({"Name":["1st header","A","B","2nd header","AA","BB","CC","DD","3rd header","AAA"],"col1":[1,2,3,10,20,30,40,50,100,200],"col2":[2,4,6,20,40,60,80,100,200,400]})
df["groupn"] = df["Name"].str.contains("header").cumsum()
group_dfs = [d for n, d in df.groupby("groupn")]
# group_dfs is now list of pd.DataFrames
for g_df in group_dfs:
print(g_df)
print("=====")

给输出

Name  col1  col2  groupn
0  1st header     1     2       1
1           A     2     4       1
2           B     3     6       1
=====
Name  col1  col2  groupn
3  2nd header    10    20       2
4          AA    20    40       2
5          BB    30    60       2
6          CC    40    80       2
7          DD    50   100       2
=====
Name  col1  col2  groupn
8  3rd header   100   200       3
9         AAA   200   400       3
=====

解释:您需要具有将Trues用于标头和Falses用于非标头的功能,我检查Name是否包含子字符串header,但如果需要,可以进行其他检查,然后我使用给出组数的累积和,这是可能的,因为TrueFalse被假定为10分别在python中需要时,然后我group BY该列并创建子数据框列表。观察它们有groupn列,如果不再需要,您可以选择删除它。

相关内容

  • 没有找到相关文章

最新更新