在指定行组中将数据从一行移动到另一行

3

我有一个数据集希望进行转换,下面是该数据集的部分内容。其中有一列名为"Hospital",其值在数据集中不断重复。我希望对这个数据集进行转换,只留下第一行(即名为"prelim_arm_1"的行)的数据,并删除其他三个分组(即"arms")所对应的行。

import pandas as pd
import numpy as np

# initialize data of lists. 
data = {'Hospital':['prelim_arm_1' , '24_hour_review_arm_1','48_hour_review_arm_1',
                    '72_hour_review_arm_1','discharge_informat_arm_1','prelim_arm_1' , 
                    '24_hour_review_arm_1','48_hour_review_arm_1',
                    '72_hour_review_arm_1','discharge_informat_arm_1'],
        'Bug_Hosp':['133', 'NAN' , 'NAN', 'NAN', 'NAN','133', 'NAN' , 'NAN', 'NAN', 'NAN'], 
        'code':['G45','NAN' ,'NAN','NAN', 'NAN', 'G45','NAN' ,'NAN','NAN', 'NAN'],
        'cont':['T256','NAN' ,'NAN','NAN', 'NAN','T256','NAN' ,'NAN','NAN', 'NAN'],
        'IPC':['NAN','NAN' ,'NAN','567TY', 'NAN','NAN','NAN' ,'NAN','567Tu', 'NAN'],
        'NO_CT':['NAN','NAN' ,'NAN','NAN', '5667','NAN','NAN' ,'NAN','3456', 'NAN'],
        } 

# Create DataFrame 
df_final = pd.DataFrame(data) 

# Print the output. 
print(df_final)


最终数据集应该像这样

import pandas as pd
import numpy as np

# initialize data of lists. 
data = {'Hospital':['prelim_arm_1'],
        'Bug_Hosp':['133'], 'code':['G45'],
        'cont':['T256'],
        'IPC':['567TY'],
        'NO_CT':['5667']} 

# Create DataFrame 
df_final = pd.DataFrame(data) 

# Print the output. 
print(df_final)

这个数据集非常庞大,且存在重复行分组,但我想每4行为一组,只保留 prelim_arm_1 的数据并删除其他 3 行分组的数据。所以最终表格将只包含每个 4 行分组的 prelim_arm_1 数据。


我认为只需要 df[df.Hospital == 'prelim_arm_1'],因为其他字段都是“NAN”。 - morganics
它们在某些列上是NAN,但查看最后两行和最后两列,它们有数据。 - LivingstoneM
1个回答

2

如果想要每五行中的第一个非缺失值,请使用首先DataFrame.replace,如果NAN是字符串,则省略此步骤,然后使用创建的辅助系列与Hospital列的第一个值prelim_arm_1进行比较,并使用GroupBy.firstSeries.cumsum分组:

#if necessary
df_final = df_final.replace('NAN',np.nan)

df_final = df_final.groupby(df_final['Hospital'].eq('prelim_arm_1').cumsum()).first()
print(df_final)
              Hospital Bug_Hosp code  cont    IPC NO_CT
Hospital                                               
1         prelim_arm_1      133  G45  T256  567TY  5667
2         prelim_arm_1      133  G45  T256  567Tu  3456

详情:

print(df_final['Hospital'].eq('prelim_arm_1').cumsum())
0    1
1    1
2    1
3    1
4    1
5    2
6    2
7    2
8    2
9    2
Name: Hospital, dtype: int32

问题很小,但数据量很大,而且行会按组重复出现。在第一批以这种方式命名的行之后,即['prelim_arm_1''24_hour_review_arm_1','48_hour_review_arm_1','72_hour_review_arm_1','discharge_informat_arm_1'],我们有另一批不同数据的行['prelim_arm_1' , '24_hour_review_arm_1','48_hour_review_arm_1','72_hour_review_arm_1','discharge_informat_arm_1'],并且它会按组继续到结束,但我想将数据移动到每个组的 prelim_arm_1 主行中。 - LivingstoneM
@LivingstoneM - 这意味着每个以 prelim_arm_1 开头的组?或者如何区分组?可以添加更多 Hospital 列数据并解释每个组的外观吗? - jezrael
1
是的,每个组都以 prelim_arm_1 开始,然后跟随其他分支。让我添加更多数据。 - LivingstoneM
我已经向问题的数据框中添加了更多的数据。 - LivingstoneM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接