-1

我有一个如下所示的表格,我想将其分成两个。问题是行数不同,我需要在包含字符串“CPT”的第三行分隔表格。这一行并不总是第 10 行。该表由 dataframe 表示dfm。我希望能够创建两个新的数据框,一个包含第三行上方包含“CPT”的行,一个包含第三行下方包含“CPT”的行

数据框 dfm

到目前为止,我有以下代码来识别所有行,特别是包含“CPT”的第三行,但我不确定我是否走在正确的轨道上。

dfm.columns
i= dfm.index[dfm['LABEL(click to hide)'] == 'CPT'].tolist()
i
i[-1]
Filter_dfm  = dfm[dfm.index.isin(i)]
Filter_dfm

编辑:我使用以下代码将数据帧 dfm 拆分为包含“CPT”的行的多个数据帧

dfm.rename(columns = {'LABEL(click to hide)' : 'ExSD', '(I)' : 'Risk'}, inplace = True)

m = dfm.ExSD.str.contains('CPT').cumsum()
d = {f'dfm{i}': g for i, g in dfm.groupby(m)}

for k, v in d.items():
    print(k)
    print(v, end='\n\n')

然后返回我想要的数据帧,我使用了输入:

d['dfm2']

输出:

ExSD    Risk
1   CPT     % Utilization Cumulative (With No New Charge) ...
2   05/1622:00  115.97 %
3   05/1700:45  37.3 %
4   05/1705:00  34.21 %
5   05/1712:00  22.27 %
6   05/1714:00  30.01 %
7   05/1716:00  33.93 %
8   05/1717:00  42.04 %
9   05/1718:00  46.48 %

输入:

d['dfm3']

输出:

    ExSD    Risk
10  CPT     % Utilization Cumulative (With No New Charge) ...
11  05/1622:00  8.24 %
12  05/1700:45  53.05 %
13  05/1705:00  36.04 %
14  05/1712:00  21.21 %
15  05/1714:00  20.65 %
16  05/1716:00  21.13 %
17  05/1717:00  23.09 %
18  05/1718:00  23.46 %
4

1 回答 1

0

答案已被修改,因为添加了不规则行数拆分的要求。修改是找到索引,该索引应该是数据帧的头部,并使用numpy split函数将其拆分。然后使用该拆分信息在原始数据框中拆分,删除看起来是标题的行,并更新列名。

mask = df[df['value1'] == 'CPT'].index.tolist()
mask
[0, 1, 10]
mask2 = np.array_split(df.index, np.array(mask))
mask2
[Int64Index([], dtype='int64'),
 Int64Index([0], dtype='int64'),
 Int64Index([1, 2, 3, 4, 5, 6, 7, 8, 9], dtype='int64'),
 Int64Index([10, 11, 12, 13, 14, 15, 16, 17, 18], dtype='int64')]

df1 = df[df.index.isin(mask2[2])]
df2 = df[df.index.isin(mask2[3])]

df1.drop(df.index[1], inplace=True)
df2.drop(df.index[10], inplace=True)

df1.columns = df.iloc[0]
df2.columns = df.iloc[0]

df1

彩管 累计利用率百分比(无新变化)
2 04/2905:00 173.31%
3 04/2912:00 29.19%
4 04/2914:00 32.62%
5 04/2916:00 35.4%
6 04/2917:00 45.3%
7 04/2918:00 50.12%
8 04/2922:00 44.16%
9 04/3000:00 41.58%
于 2021-05-11T04:53:16.310 回答