根据某些行名称对数据框中的行进行分组和转置

许多

这个问题与这里的帖子有关[搜索并返回python数据框下面的行并转置

我有一个数据框,其中每一行都在网上刮擦了文本,其中包含体育选择信息(全部都在同一列中)。链接文章中的解决方案效果很好,但是由于文本中没有一致的模式,因此我发现了更多麻烦。这是我的DF:

print(df): 
Col A    

Race 1 - Handicap
14 - NAME
3  - NAME
5  - NAME
6  - NAME
4  - NAME
Race Overview: lorem ipsum etc etc
Race 2 - Sprint
12 - NAME
10 - NAME
8 - NAME
11 - NAME
Race Overview: Second lorem ipsum etc etc
Race 3 - Sprint
1  - NAME
14 - NAME
8  - NAME
6  - NAME
Race 4 - Handicap
1  - NAME
14 - NAME
8  - NAME
#Race numbers may run up to 15-20

我正在尝试将其转换为:

print(df):
Race Name             | Selection No    | Selection    | Race Overview

Race 1 - Handicap     |  1              |  14 - Name   | Race Overview: lorem ipsum etc etc
Race 1 - Handicap     |  2              |  3  - Name   | Race Overview: lorem ipsum etc etc
Race 1 - Handicap     |  3              |  5  - Name   | Race Overview: lorem ipsum etc etc
Race 1 - Handicap     |  4              |  6  - Name   | Race Overview: lorem ipsum etc etc
Race 1 - Handicap     |  5              |  4  - Name   | Race Overview: lorem ipsum etc etc
Race 2 - Sprint       |  1              |  12 - Name   | Race Overview: Second lorem ipsum etc etc
Race 2 - Sprint       |  2              |  10 - Name   | Race Overview: Second lorem ipsum etc etc
Race 2 - Sprint       |  3              |  8  - Name   | Race Overview: Second lorem ipsum etc etc
Race 2 - Sprint       |  4              |  11 - Name   | Race Overview: Second lorem ipsum etc etc
Race 3 - Sprint       |  1              |  1  - Name   | 
Race 3 - Sprint       |  2              |  14 - Name   | 
Race 3 - Sprint       |  3              |  8  - Name   | 
Race 3 - Sprint       |  4              |  6  - Name   | 
Race 4 - Sprint       |  1              |  1  - Name   | 
Race 4 - Sprint       |  2              |  14 - Name   | 
Race 4 - Sprint       |  3              |  8  - Name   | 

如果图案是基于6行的重复圆柱,则此函数用于转置:

df2 = (
    pd.DataFrame(data = df['Col A'].values.reshape(-1, 6))
    .set_index([0, 5])
    .stack()
    .rename_axis(index=['Race Name','Race Overview','Selection No'])
    .to_frame('Selection')
    .reset_index()
)

是否需要在每行之间找到"Race [0-9] -"行,然后df2对每个模式运行以上行

任何帮助将非常感激。谢谢!

耶斯列尔

采用:

#get Race values by pattern
df['Race Name'] = df['Col A'].where(df['Col A'].str.contains('Race [0-9]+ -'))
#get Selection values by pattern - starting numeric of original column
df['Selection'] = df['Col A'].where(df['Col A'].str.contains('^[0-9]+'))
#get info column
df['Race Overview'] = df['Col A'].where(df['Race Name'].isna() & df['Selection'].isna())

#forward and back filling per helper groups
s1 = df['Selection'].isna().cumsum()
s2 = df['Race Overview'].notna().iloc[::-1].cumsum()
df['Race Name'] = df.groupby(s1)['Race Name'].ffill()
df['Race Overview'] = df.groupby(s2)['Race Overview'].bfill()

#remove rows by missing values and also original column
df = df.dropna(subset=['Race Name', 'Selection']).drop('Col A', axis=1)
#added counter
df.insert(1, 'Selection No', df.groupby('Race Name').cumcount().add(1))

print (df)
            Race Name  Selection No  Selection  \
4   Race 1 - Handicap             1  14 - NAME   
5   Race 1 - Handicap             2  3  - NAME   
6   Race 1 - Handicap             3  5  - NAME   
7   Race 1 - Handicap             4  6  - NAME   
8   Race 1 - Handicap             5  4  - NAME   
11    Race 2 - Sprint             1  12 - NAME   
12    Race 2 - Sprint             2  10 - NAME   
13    Race 2 - Sprint             3   8 - NAME   
14    Race 2 - Sprint             4  11 - NAME   
17    Race 3 - Sprint             1  1  - NAME   
18    Race 3 - Sprint             2  14 - NAME   
19    Race 3 - Sprint             3  8  - NAME   
20    Race 3 - Sprint             4  6  - NAME   
22  Race 4 - Handicap             1  1  - NAME   
23  Race 4 - Handicap             2  14 - NAME   
24  Race 4 - Handicap             3  8  - NAME   

                                Race Overview  
4          Race Overview: lorem ipsum etc etc  
5          Race Overview: lorem ipsum etc etc  
6          Race Overview: lorem ipsum etc etc  
7          Race Overview: lorem ipsum etc etc  
8          Race Overview: lorem ipsum etc etc  
11  Race Overview: Second lorem ipsum etc etc  
12  Race Overview: Second lorem ipsum etc etc  
13  Race Overview: Second lorem ipsum etc etc  
14  Race Overview: Second lorem ipsum etc etc  
17                                        NaN  
18                                        NaN  
19                                        NaN  
20                                        NaN  
22                                        NaN  
23                                        NaN  
24                                        NaN  

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据条件并排除最后一行来对数据帧行进行分组和平均

根据列值对有序熊猫数据框中的行进行分组

如何根据R中的某些条件和总和对多行进行分组?

按索引对数据框行进行分组

如何按季度对数据框中的行进行分组?

如果没有某些特定值,则对数据框列中的行进行计数

根据特定列中的值对数据框行进行排序

对数据框行进行分组并对其进行处理

根据单独数据框中的行和列值对数据框进行切片

如何根据列中的值对数据框的行进行重新排序

根据条件对数据帧行进行分组和平均

根据数据表的某些行选择的特定列对数据框进行子集

按列对数据框中的某些行进行排序

通过将值分配为pandas数据框中的列来对数据框中的行进行分组

Powershell 根据特定列对数据进行排序和转置

使用 dplyr 对数据框进行整形/转置

根据字典对数据框进行分组

根据日期列对数据框中的行进行分组

在使用 XSLT 对数据进行分组和转置方面需要帮助

数据框根据条件对行进行分组

如何根据时间戳范围和行类型对 SPARK 数据框中的行进行配对

在bigquery中根据id和时间对数据进行分组

根据值对数据集行进行分组

如何对数据框中部分匹配的行进行分组?

根据开始和停止列对数据框进行分组

根据列对数据框中的多行进行分组

按 R 中的连续值对数据框行进行分组

如何根据一列对数据框进行分组并根据另一列进行转置

在数据框列表中按天对数据框的行进行分组