簡體   English   中英

Pandas:如何正確取消 df?

[英]Pandas: how to unpivot df correctly?

我有以下 dataframe df

  A  B  Var    Value
0 A1 B1 T1name T1
1 A2 B2 T1name T1
2 A1 B1 T2name T2
3 A2 B2 T2name T2
4 A1 B1 T1res  1
5 A2 B2 T1res  1
6 A1 B1 T2res  2
7 A2 B2 T2res  2

我現在想“減半”我的 dataframe 因為Var包含不應在同一列下 go 的變量。 我的預期結果是:

  A  B  Name   Value
0 A1 B1 T1     1
1 A2 B2 T1     1
2 A1 B1 T2     2
3 A2 B2 T2     2

我應該用什么來正確地取消旋轉?

然后:

df = df[~df['Var'].isin(['T1name','T2name'])]

output:

    A   B    Var Value
4  A1  B1  T1res     1
5  A2  B2  T1res     1
6  A1  B1  T2res     2
7  A2  B2  T2res     2

只需過濾字符串包含res的位置,並使用 var 列的前兩個字符分配一個新列

df[df['Var'].str.contains('res')].assign(Name=df['Var'].str[:2]).drop(columns='Var')

    A   B Value Name
4  A1  B1     1   T1
5  A2  B2     1   T1
6  A1  B1     2   T2
7  A2  B2     2   T2

請注意,這會創建原始 DataFrame 的切片,而不是副本

查看 df 有不同的選項。 正則表達式似乎位居榜首。 如果正則表達式不起作用,也許考慮重新定義您的問題:

按 dtype 過濾Value ,替換 df 中不需要的字符並重命名列。 下面的代碼

df[df['Value'].str.isnumeric()].replace(regex=r'res$', value='').rename(columns={'Var':'Name'})

    A   B Name Value
4  A1  B1   T1     1
5  A2  B2   T1     1
6  A1  B1   T2     2
7  A2  B2   T2     2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM