身体:
问题:
我有一个很宽的 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 以获得所需的输出?
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