[英]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.