我有一个像这样的数据框:
>df = pd.DataFrame({'A':['M',2,3],'B':['M',2,3],'AA':['N',20,30],'BB':['N',20,30]})
>df = df.rename(columns={df.columns[2]: 'A'})
>df = df.rename(columns={df.columns[3]: 'B'})
>df
A B A B
0 M M N N
1 2 2 20 20
2 3 3 30 30
我必须按行索引0 ='M'和'N'垂直分割数据帧:
A B
0 M M
1 2 2
2 3 3
A B
0 N N
1 20 20
2 30 30
数据框中的数据来自Excel工作表,并且列名不是唯一的。 感谢您的帮助!
答案 0 :(得分:1)
使用pandas iloc选择列:
= ^ .. ^ =
import pandas as pd
df = pd.DataFrame({'A':['M',2,3],'B':['M',2,3],'AA':['N',20,30],'BB':['N',20,30]})
df = df.rename(columns={df.columns[2]: 'A'})
df = df.rename(columns={df.columns[3]: 'B'})
df1 = df.iloc[:, :2]
df2 = df.iloc[:, 2:]
输出:
A B
0 M M
1 2 2
2 3 3
A B
0 N N
1 20 20
2 30 30
答案 1 :(得分:1)
将list comprehension
与loc
一起使用:
dfs = [df.loc[:, df.loc[0,:].eq(s)] for s in ['M','N']]
这将在列表中提供单独的数据帧。
答案 2 :(得分:1)
这应该可以完成工作:
df.loc[:,df.iloc[0, :] == "M"]
df.loc[:,df.iloc[0, :] == "N"]