我有一個資料框,我想以某種方式轉置,其中“attr”列值變為列而不是值,而價格保留為列。
我試圖對列進行分組并將其轉置,但還沒有找到到達我想要的位置的方法。這是我的資料集:
attr values price
0 M?rke Knauf Insulation 24.95
1 Produkttype Bygningsisolering 24.95
2 Serie SPACE 24.95
3 Model FORMSTYKKE 24.95
4 M?rke Bromiflex 20.00
5 Produkttype R?rsk?l 20.00
6 Materiale Opskummet polyethylen 20.00
7 St?rrelse ?18 MM 20.00
8 M?rke Skamowall 190.00
9 Produkttype Isoleringsplade 190.00
10 Serie BASIC 190.00
11 Materiale Br?ndt kalk og mikrosilika 190.00
12 M?rke Rockwool 210.00
13 Produkttype Bygningsisolering 210.00
14 Serie Terr?nbatts 210.00
15 Materiale Stenuld 210.00
16 M?rke Knauf Insulation 65.00
17 Produkttype Isolering 65.00
我想要的是這個:
M?rke Produkttype Serie Model Materiale St?rrelse Price
Knauf Insulation Bygningsisolering SPACE FORMSTYKKE NAN NAN 24.95
Bromiflex R?rsk?l NAN NAN Opskummet polyethylen ?18 MM 24.95
我從 df.groupby(["attr", "values"])["price"].mean().reset_index().set_index("attr") 開始,但沒有得到想要的結構,這很可能涉及轉置資料集。
任何幫助都非常感謝!
uj5u.com熱心網友回復:
# produce data
df = pd.DataFrame(data=[
("M?rke", "Knauf Insulation", 24.95),
("Produkttype", "Bygningsisolering", 24.95),
("Serie", "SPACE", 24.95),
("M?rke", "Bromiflex", 20.00),
("Produkttype", "R?rsk?l", 20.00),
("Materiale", "Opskummet polyethylen", 20.00),
("St?rrelse", "?18 MM", 20.00),
],
columns = ("attr", "values", "price")
)
# display data
df.head()
# output
attr values price
0 M?rke Knauf Insulation 24.95
1 Produkttype Bygningsisolering 24.95
2 Serie SPACE 24.95
3 M?rke Bromiflex 20.00
4 Produkttype R?rsk?l 20.00
# transform data using *pivot* method
df = df.pivot(columns="attr", values="values", index="price").reset_index()
df.columns.name = None
# show results
df.head()
# output
price Materiale M?rke Produkttype Serie St?rrelse
0 20.00 Opskummet polyethylen Bromiflex R?rsk?l NaN ?18 MM
1 24.95 NaN Knauf Insulation Bygningsisolering SPACE NaN
uj5u.com熱心網友回復:
- https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.pivot.html是基本功能
- 已經定義了一個列,在價格不唯一的情況下,每個M?rke都會發生變化
import io
import pandas as pd
df = pd.read_csv(io.StringIO(""" attr values price
0 M?rke Knauf Insulation 24.95
1 Produkttype Bygningsisolering 24.95
2 Serie SPACE 24.95
3 Model FORMSTYKKE 24.95
4 M?rke Bromiflex 20.00
5 Produkttype R?rsk?l 20.00
6 Materiale Opskummet polyethylen 20.00
7 St?rrelse ?18 MM 20.00
8 M?rke Skamowall 190.00
9 Produkttype Isoleringsplade 190.00
10 Serie BASIC 190.00
11 Materiale Br?ndt kalk og mikrosilika 190.00
12 M?rke Rockwool 210.00
13 Produkttype Bygningsisolering 210.00
14 Serie Terr?nbatts 210.00
15 Materiale Stenuld 210.00
16 M?rke Knauf Insulation 65.00
17 Produkttype Isolering 65.00"""), sep="\s\s ", engine="python")
df.assign(prod_idx=df["attr"].eq("M?rke").cumsum()).pivot(
index=["prod_idx", "price"], columns="attr", values=["values"]
).droplevel(0,1).reset_index()
| prod_idx | 價錢 | 材料 | 模型 | 梅爾克 | 產品型別 | 意甲 | 斯托雷爾塞 | |
|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 24.95 | 南 | 表格樣式 | 可耐福絕緣 | 通過隔離 | 空間 | 南 |
| 1 | 2 | 20 | Opskummet 聚乙烯 | 南 | Bromiflex | 勒斯卡爾 | 南 | ?18毫米 |
| 2 | 3 | 190 | Br?ndt kalk og mikrosilika | 南 | 斯卡莫沃爾 | 隔離板 | 基本的 | 南 |
| 3 | 4 | 210 | 斯圖爾德 | 南 | 巖棉 | 通過隔離 | 泰倫巴特斯 | 南 |
| 4 | 5 | 65 | 南 | 南 | 可耐福絕緣 | 隔離 | 南 | 南 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/336081.html
上一篇:如何捕獲資料框中值更改的生效日期
