如何基于列前缀拆分pandas数据框架



我有一个从csv导入的数据框架。它是这样的:

df
A.1  B.1  A.2  B.2
1    1    1    1
2    2    2    2

我的问题是,什么是一个有效的方法来把它变成单独的数据帧只是由A和B组成的

df_a
A.1  A.2
1    1
2    2
df_b
B.1  B.2
1    1
2    2

我不挑剔的列名,将他们只是剥离到1和2等很好,但还没能找到一个好的方法来做到这一点。我也愿意接受其他/更好的方法来完成我正在尝试做的事情,以防这对更有知识的人来说没有意义。谢谢!

您可以使用df.filter与正则表达式模式:

df_a, df_B = df.filter(regex=r'^A'), df.filter(regex=r'^B')

df_a, df_B = df.filter(like='A'), df.filter(like='B')

注意,如果使用like='A',则名称包含 'A'的所有列都将被选中。如果您使用regex=r'^A',那么只有那些名称A开头的列将被选中。


In [7]: df
Out[7]: 
   A.1  B.1  A.2  B.2
0    1    1    1    1
1    2    2    2    2
In [8]: df_a, df_B = df.filter(regex=r'^A'), df.filter(regex=r'^B')
In [9]: df_a
Out[9]: 
   A.1  A.2
0    1    1
1    2    2
In [10]: df_B
Out[10]: 
   B.1  B.2
0    1    1
1    2    2

好的,如果我理解正确的话,你只需要根据它们的列名添加N个新的数据框架。

dfa = df[[col for col in df.columns if col.startswith("A")]].copy()
# same for dfb, dfc...

注意,如果您希望稍后对新数据框dfa应用更改,则需要copy()。否则,如果我没记错的话,您将通过指针应用更改,就像使用字典一样。

选择列:

dfa = df[['A.1', 'A.2']]

更改列的名称:

dfa.reindex=["a1","a2"]

最新更新