pandas Python -如何在Python中将 Dataframe 的特定列更改为行?

6tqwzwtp  于 2023-06-28  发布在  Python
关注(0)|答案(1)|浏览(123)

我想在Python中执行一个特定的操作。实际上,我有一个CSV文件,其中许多数据被指定到列中。我想把它们变成一排排。但是,我们必须遵守特定的规则。
以下是数据集格式:
[...,'N° Panneau',' Sexe','Prénom_Nom_Cand1',' Voix','% Voix/Ins','% Voix/Exp',
'col_28',' col_29','Prénom_Nom_Cand2',' col_32','col_33',' col_34',
'col_35',' col_36','Prénom_Nom_Cand3',' col_39','col_40',' col_41',
'col_42',' col_43','Prénom_Nom_Cand4',' col_46','col_47',' col_48',
'col_49',' col_50','Prénom_Nom_Cand5',' col_53','col_54',' col_55',
'col_56',' col_57','Prénom_Nom_Cand6',' col_60','col_61',' col_62',
'col_63',' col_64','Prénom_Nom_Cand7',' col_67','col_68',' col_69',
'col_70',' col_71','Prénom_Nom_Cand8',' col_74','col_75',' col_76',
'col_77',' col_78','Prénom_Nom_Cand9',' col_81','col_82',' col_83',
'col_84',' col_85','Prénom_Nom_Cand10',' col_88','col_89',' col_90',
'col_91',' col_92','Prénom_Nom_Cand11',' col_95','col_96',' col_97',
'col_98',' col_99','Prénom_Nom_Cand12',' col_102','col_103','col_104']
其中**'N ° Panneau','Sexe','Prénom_Nom_Cand1','Voix',' % Voix/Ins','% Voix/Exp''col_{number}','col_{number}','Prénom_Nom_Cand','col_{number}','col_{number}','col_{number}'是相同的列
我只想让列
'N ° Panneau','Sexe','Prénom_Nom_Cand1','Voix',' % Voix/Ins','% Voix/Exp'包含所有col_...**值等。
我如何才能做到这一点(得到列作为行)像上面指定的?

zbwhf8kr

zbwhf8kr1#

假设df是你的输入 wide-format DataFrame,你可以用途:

out = (
    pd.DataFrame(df.to_numpy().reshape(-1, 6), columns= df.columns[:6])
)

输出:

print(out)

    N°Panneau  Sexe  Prénom_Nom_Cand1  Voix  % Voix/Ins  % Voix/Exp
0           5     8                 9     5           0           0
1           1     7                 6     9           2           4
2           5     2                 4     2           4           7
..        ...   ...               ...   ...         ...         ...
57          9     7                 0     5           2           2
58          8     5                 0     5           9           8
59          6     6                 0     4           7           3

[60 rows x 6 columns]
  • 使用的输入:*
cols = [
    'N°Panneau', 'Sexe', 'Prénom_Nom_Cand1', 'Voix', '% Voix/Ins', '% Voix/Exp',
    'col_28', 'col_29', 'Prénom_Nom_Cand2', 'col_32', 'col_33', 'col_34',
    'col_35', 'col_36', 'Prénom_Nom_Cand3', 'col_39', 'col_40', 'col_41',
    ...
]

np.random.seed(1)

df = pd.DataFrame(np.random.randint(0, 10, (5, len(cols))), columns=cols)

   N°Panneau  Sexe  Prénom_Nom_Cand1  ...  col_102  col_103  col_104
0          5     8                 9  ...        6        8        0
1          2     7                 7  ...        5        4        0
2          7     8                 9  ...        3        8        3
3          5     6                 7  ...        9        1        2
4          0     4                 7  ...        4        7        3

[5 rows x 72 columns]

更新:

gh_url = "https://raw.githubusercontent.com/kivircik55/dataset/main/" \
         "resultats_par_niveau_burvot_t1_france_entiere_prepared_joined" \
         "_prepared%20(1).csv"

df = pd.read_csv(gh_url)

idx = df.columns.get_loc("Prénom_Nom_Cand1")-2

wide_blocks = df.iloc[:, idx:]

long_blocks = pd.DataFrame(
    wide_blocks.to_numpy().reshape(-1, 6),
    columns= wide_blocks.columns[:6]
)

out = (
    df.iloc[:, :idx].join(
        long_blocks.set_index(
            np.arange(len(df)).repeat(len(long_blocks.columns)*2)))
)

输出:

print(out)

    Année  Code du département Libellé du département  ...  Voix % Voix/Ins  % Voix/Exp
0    2022                   24               Dordogne  ...     2       0.23        0.39
0    2022                   24               Dordogne  ...    13       1.51        2.51
0    2022                   24               Dordogne  ...   139      16.13       26.89
..    ...                  ...                    ...  ...   ...        ...         ...
43   2022                   24               Dordogne  ...    39       4.23        5.86
43   2022                   24               Dordogne  ...     4       0.43         0.6
43   2022                   24               Dordogne  ...    16       1.74         2.4

[528 rows x 29 columns]

相关问题