重塑数据框;融化/旋转

问题描述 投票:0回答:1

身体:

问题:

我有一个很宽的 DataFram,我正在努力使用 pandas 对其进行重塑和聚合。

样本数据:

未命名:1 未命名:2 未命名:3
Bezeichnung(Bezirksregion) 斯特拉塔滕 -insgesamt- 劳勿
米特 81178 823
蒂尔加滕南区 4113 37
Regierungsviertel 6251 41
亚历山大广场 18999 163
import pandas as pd
from io import StringIO

# Sample data
data = """
,Unnamed: 1,Unnamed: 2,Unnamed: 3
3,Bezeichnung (Bezirksregion),Straftaten \\n-insgesamt-,Raub
4,Mitte,81178,823
5,Tiergarten Süd,4113,37
6,Regierungsviertel,6251,41
7,Alexanderplatz,18999,163
"""

# Load data into a DataFrame
df = pd.read_csv(StringIO(data), index_col=0)

# Display the DataFrame
print("Loaded DataFrame:")
print(df)

所需输出:

desired_output = {
    'Region': ['Mitte', 'Tiergarten Süd', 'Regierungsviertel', 'Alexanderplatz'],
    'Crimes': ['Straftaten -insgesamt-', 'Straftaten -insgesamt-', 'Raub', 'Raub'],
    'count': [81178, 4113, 41.33, 163],
}
地区 犯罪
米特 Straftaten -insgesamt- 81178
蒂尔加滕南区 Straftaten -insgesamt- 4113
Regierungsviertel 劳勿 41.33
亚历山大广场 劳布 163

目前的方法:

melted_df = pd.melt(df, id_vars=[df.columns[0]], var_name='crime', value_name='crime_count')

问题:

结果不符合预期:

犯罪 犯罪计数
Bezeichnung(Bezirksregion) 未命名:2 斯特拉塔滕 -insgesamt-
米特 未命名:2 81178
蒂尔加滕南区 未命名:2 4113
Regierungsviertel 未命名:2 6251
亚历山大广场 未命名:2 18999

请求协助:

如何重塑 DataFrame 以获得所需的输出?

python pandas transformation data-modeling
1个回答
0
投票

IIUC,您需要使用数据的第一行重命名列,然后将其熔化在第一列上并重命名生成的数据框的列:

res = (df
    .set_axis(df.iloc[0], axis=1)
    .drop(df.index[0])
    .melt(id_vars=df.iloc[0,0])
    .set_axis(['Region', 'Crimes', 'Count'], axis=1)
)

样本数据的输出:

              Region                    Crimes  Count
0              Mitte  Straftaten \n-insgesamt-  81178
1     Tiergarten Süd  Straftaten \n-insgesamt-   4113
2  Regierungsviertel  Straftaten \n-insgesamt-   6251
3     Alexanderplatz  Straftaten \n-insgesamt-  18999
4              Mitte                      Raub    823
5     Tiergarten Süd                      Raub     37
6  Regierungsviertel                      Raub     41
7     Alexanderplatz                      Raub    163
© www.soinside.com 2019 - 2024. All rights reserved.