我的pandas数据框的特定转置



我有一个数据框,我想以某种方式转置,其中的"列值变成列而不是值,而价格仍然是列。

我试图分组列和转置它,但没有找到一种方法来得到我想要的地方。这是我的数据集:

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     

我从f.groupby(["attr", "values"])["price"].mean().reset_index().set_index("attr")开始,但没有得到想要的结构,这很可能涉及到数据集的转置。

任何帮助都非常感谢!

  • https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.pivot.html is base capability
  • 定义了一个列,每个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="ss+", 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()
圣ørrelse可耐福绝缘Ø18毫米td>可耐福绝缘
# 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

相关内容

  • 没有找到相关文章

最新更新