如何旋转特定的数据框?

How to pivot a specific dataframe?

我有一个包含混合数据(浮点数和文本)的数据框 df,打印时看起来像这样(它只是打印的一小部分):

              0           1
0   Le Maurepas         NaN
1       CODE_90     AREA_HA
2           112      194.97
3           121       70.37
4           211      113.86
5    La Rolande         NaN
6       CODE_90     AREA_HA
7           112      176.52
8           211       97.28

如有必要,可以通过以下代码(例如)重现此输出:

import pandas as pd

fst_col = ['Le Maurepas', 'CODE_90', 112, 121, 211, 'La Rolande', 'CODE_90', 112, 211]
snd_col = ['NaN', 'AREA_HA', 194.97, 70.37, 113.86, 'NaN', 'AREA_HA', 176.52, 97.28]

df = pd.DataFrame({'0' : fst_col, '1' : snd_col})

df

我想为我的数据框提供另一个结构 df 并使其在打印时看起来像这样:

           Name     Code      Area
0   Le Maurepas      112    194.97
1   Le Maurepas      121     70.37
2   Le Maurepas      211    113.86
3    La Rolande      112    176.52
4    La Rolande      211     97.28

我浏览了 SO,我知道像 pivot(index='', columns='', values='') 这样的函数也许可以完成这项工作,但我不知道它是否适用于我的情况,事实上,不知道怎么申请...

我是否还必须通过操纵参数indexcolumnsvalues来坚持这个功能,还是有特定的方法,更精确地对应于结构我的初始数据框 df?

欢迎任何帮助。

IIUC,尝试:

#change the string "NaN" empty values
df["1"] = df["1"].replace("NaN", None)

output = pd.DataFrame()
output["Name"] = df.loc[df["1"].isnull(), "0"].reindex(df.index, method="ffill")
output["Code"] = pd.to_numeric(df["0"], errors="coerce")
output["Area"] = pd.to_numeric(df["1"], errors="coerce")
output = output.dropna().reset_index(drop=True)

>>> output

          Name   Code    Area
0  Le Maurepas  112.0  194.97
1  Le Maurepas  121.0   70.37
2  Le Maurepas  211.0  113.86
3   La Rolande  112.0  176.52
4   La Rolande  211.0   96.28

您可以使用:

indexes = (df[df['0'].eq('CODE_90')].index - 1).to_list()
indexes.append(len(df))
all_dfs = []
for idx in range(0, len(indexes)-1):
    df_temp = df.loc[indexes[idx]:indexes[idx+1]-1]
    print(df_temp)
    df_temp['Name'] = df_temp['0'].iloc[0]
    df_temp.rename(columns={'0': 'Code', '1': 'Area'}, inplace=True)
    all_dfs.append(df_temp.iloc[2:])

df = pd.concat(all_dfs, ignore_index=True)
print(df)