按行值分割熊猫数据框列

时间:2019-06-18 09:49:21

标签: python pandas dataframe

我有一个像这样的数据框:

>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工作表,并且列名不是唯一的。 感谢您的帮助!

3 个答案:

答案 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 comprehensionloc一起使用:

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"]