![](/img/trans.png)
[英]How to split a dataframe in multiple dataframes after a specific column value is found
[英]How do I split a single dataframe into multiple dataframes by the range of a column value?
首先,我意识到这个问题已经以许多不同的形式被问过很多次,但是很多答案只是给出了解决问题的代码,而没有解释代码的实际作用或工作原理。
我有大量的电话号码和区号数据集,已将它们加载到python的数据框中以进行一些处理。 在执行该处理之前,我需要将单个数据框拆分为多个包含某些区域代码电话号码的数据框,然后可以对其进行更多处理。 例如:
+---+--------------+-----------+
| | phone_number | area_code |
+---+--------------+-----------+
| 1 | 5501231234 | 550 |
+---+--------------+-----------+
| 2 | 5051231234 | 505 |
+---+--------------+-----------+
| 3 | 5001231234 | 500 |
+---+--------------+-----------+
| 4 | 6201231234 | 620 |
+---+--------------+-----------+
成
area-codes (500-550)
+---+--------------+-----------+
| | phone_number | area_code |
+---+--------------+-----------+
| 1 | 5501231234 | 550 |
+---+--------------+-----------+
| 2 | 5051231234 | 505 |
+---+--------------+-----------+
| 3 | 5001231234 | 500 |
+---+--------------+-----------+
和
area-codes (600-650)
+---+--------------+-----------+
| | phone_number | area_code |
+---+--------------+-----------+
| 1 | 6201231234 | 620 |
+---+--------------+-----------+
我知道使用熊猫(特别是groupby和一个Series对象)应该可以实现,但是我可以在互联网上找到的文档和示例太模糊或稀疏,以至于我无法遵循。 也许有比我尝试的方法更好的方法吗?
您可以使用pd.cut
来bin
的area
栏,然后在字典中使用标签组的数据和存储。 最后打印每个键以查看数据框:
bins=[500,550,600,650]
labels=['500-550','550-600','600-650']
d={f'area_code_{i}':g for i,g in
df.groupby(pd.cut(df.area_code,bins,include_lowest=True,labels=labels))}
print(d['area_code_500-550'])
print('\n')
print(d['area_code_600-650'])
phone_number area_code
0 5501231234 550
1 5051231234 505
2 5001231234 500
phone_number area_code
3 6201231234 620
您也可以通过使用&
或|
链接多个条件来选择数据框中的行来执行此操作 操作者
df1选择区域代码在500-550之间的行
df2选择区域代码在600-650之间的行
df = pd.DataFrame({'phone_number':[5501231234, 5051231234, 5001231234 ,6201231234],
'area_code':[550,505,500,620]},
columns=['phone_number', 'area_code'])
df1 = df[ (df['area_code']>=500) & (df['area_code']<=550) ]
df2 = df[ (df['area_code']>=600) & (df['area_code']<=650) ]
df1
phone_number area_code
0 5501231234 550
1 5051231234 505
2 5001231234 500
df2
phone_number area_code
3 6201231234 620
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.