python - 如何在特定条件下组合熊猫中的连续行
问题描述
我有一个数据集,由于 OCR 有点脏。示例如下所示:
date float_col1 float_col2 txt_col
0 12/17/2019 0.00 5012.41 some string1
1 12/26/2019 0.00 0.30 some string2
2 NaN 1.98 0.00 some string3
3 01/06/2020 0.00 673.01 some string4
4 NaN 0.00 0.00 some string5
5 NaN 786.60 0.00 some string6
我想合并第 4 行和第 5 行,因为它们应该属于一起。
条件是如果 float_col1 和 float_col1 都是 NA 那么它们应该被组合。
数据集应如下所示:
date float_col1 float_col2 txt_col
0 12/17/2019 0.00 5012.41 some string1
1 12/26/2019 0.00 0.30 some string2
2 NaN 1.98 0.00 some string3
3 01/06/2020 0.00 673.01 some string4
4 NaN 786.60 0.00 some string5 some string6
谢谢。
解决方案
我们首先需要fillna
NaN ,因为np.nan
不等于它自己,然后我们只需gorupby
使用, 使用由andagg
创建的新密钥shift
cumsum
df.date.fillna('NaN',inplace=True)
fund={'date':'first','float_col1':'sum','float_col2':'sum','txt_col':','.join}
newdf=df.groupby(df.date.ne(df.date.shift()).cumsum()).agg(fund)
Out[28]:
date float_col1 float_col2 txt_col
date
1 12/17/2019 0.00 5012.41 somestring1
2 12/26/2019 0.00 0.30 somestring2
3 NaN 1.98 0.00 somestring3
4 01/06/2020 0.00 673.01 somestring4
5 NaN 786.60 0.00 somestring5,somestring6
推荐阅读
- java - 使用 PreBuiltTransportClient 调用 elasticsearch
- python - 用它们的计数替换嵌套列表中的元素
- javascript - QueryDocumentSnapshot 似乎缺少其父类的方法
- c++ - 将指向数组的指针传递给 C 和 C++ 中的函数的两个不同结果?
- terraform - Terraform HCL 中的集合或模板
- office365 - 在 Microsoft Teams 中禁用 PowerBI 选项卡
- c# - Dynamic Query Builder for ASP.Net-MVC - 使用 jQuery QueryBuilder、DataTables 和 dynamic-linq-query-builder
- mysql - 为什么 `SET NAMES utf8` 会改变 `REPLACE(uuid(),...)` 调用的行为?
- python - 在 pandas Dataframe Python 中创建一个 3xX 数组
- python - 从 for 循环访问索引并使用它创建新列表的问题