繁体   English   中英

基于Pandas DataFrame拆分的列值列表

[英]Pandas dataframe split based list of column values

我有一个很大的区域数据集,我想根据区域列表将datframe分为多个数据帧。

例:

regions         val1    val2
A                1        2
A                1        2
B                1        2
C                1        2
D                1        2
E                1        2
A                1        2

我想通过分组(A,E),(B,C,D)拆分上述数据框

DF1:
    regions         val1    val2
    A                1        2
    A                1        2
    E                1        2
    A                1        2

DF2:    
    B                1        2
    C                1        2
    D                1        2

我尝试通过手动指定df[(df['regions'] == 'A') | (df['regions'] == 'E')] df[(df['regions'] == 'A') | (df['regions'] == 'E')] 我想避免在创建数据框时手动指定这些区域代码。 我对熊猫很陌生。 反正有做吗?

您可以创建DataFrame字典以避免使用dictioanry comprehension和Series.isin以及boolean indexing进行过滤来手动创建DataFrame:

L =  [('A','E'), ('B','C','D')]

dfs = {'_'.join(x):df[df['regions'].isin(x)] for x in L}
print (dfs)
{'A_E':   regions  val1  val2
0       A     1     2
1       A     1     2
5       E     1     2
6       A     1     2, 'B_C_D':   regions  val1  val2
2       B     1     2
3       C     1     2
4       D     1     2}

对于选择每个DataFrame使用键:

print (dfs['A_E'])
  regions  val1  val2
0       A     1     2
1       A     1     2
5       E     1     2
6       A     1     2

print (dfs['B_C_D'])
  regions  val1  val2
2       B     1     2
3       C     1     2
4       D     1     2

每年的解决方案是:

df1 = df[df['regions'].isin(('A','E'))]
print (df1)
  regions  val1  val2
0       A     1     2
1       A     1     2
5       E     1     2
6       A     1     2

df2 = df[df['regions'].isin(('B','C','D'))]
print (df2)
  regions  val1  val2
2       B     1     2
3       C     1     2
4       D     1     2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM