Pandas: 如何正确反旋转 df?
Pandas: how to unpivot df correctly?
我有以下数据框 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
我现在想要 'half' 我的数据框,因为 Var
包含不应放在同一列下的变量。我的预期结果是:
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'])]
输出:
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
我有以下数据框 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
我现在想要 'half' 我的数据框,因为 Var
包含不应放在同一列下的变量。我的预期结果是:
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'])]
输出:
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