我有一个如下所示的数据集(具有更多的列和行):

    id  type      value
0  104     0       7999
1  105     1  196193579
2  108     0     245744
3  NaN     1        NaN

有些行有NaN值,我已经有了这些行的索引.现在,我想将这些行与其前一行连接在一起,但NaN值除外.如果我说是indexes=[3],那么新的数据帧应该是:

    id  type      value
0  104     0       7999
1  105     1  196193579
2  108    01     245744

我怎么能这样做呢?

NOTE:第一行永远不会出现在我拥有的索引列表中.解决方案必须给出我的索引列表.如果需要,我还知道NaN值所在的列的名称.

推荐答案

如果您有一个外部索引列表要与上面的行合并,您可以使用:

indexes=[3]

out = (df
   .astype({'type': str})
   .groupby((~df.index.to_series().isin(indexes)).cumsum())
   .agg({'id': 'first', 'type': ''.join, 'value': 'first'})
 )

如果您有许多列,请以编程方式构建聚合词典:

indexes=[3]
d = {k: ''.join if t == object else 'first'
     for k, t in df.dtypes.items()}

out = (df
   .astype({'type': str})
   .groupby((~df.index.to_series().isin(indexes)).cumsum())
   .agg(d)
 )

输出:

      id type        value
1  104.0    0       7999.0
2  105.0    1  196193579.0
3  108.0   01     245744.0

Python相关问答推荐

Python -根据另一个数据框中的列编辑和替换数据框中的列值

计算所有前面行(当前行)中列的值

使用polars .滤镜进行切片速度比pandas .loc慢

将numpy数组存储在原始二进制文件中

韦尔福德方差与Numpy方差不同

查找两极rame中组之间的所有差异

从numpy数组和参数创建收件箱

运行终端命令时出现问题:pip start anonymous"

如何制作10,000年及以后的日期时间对象?

Pandas:将多级列名改为一级

在np数组上实现无重叠的二维滑动窗口

使用Python从URL下载Excel文件

为什么Python内存中的列表大小与文档不匹配?

Python日志(log)模块如何在将消息发送到父日志(log)记录器之前向消息添加类实例变量

如何过滤组s最大和最小行使用`transform`'

语法错误:文档. evaluate:表达式不是合法表达式

如何重新组织我的Pandas DataFrame,使列名成为列值?

如何为需要初始化的具体类实现依赖反转和接口分离?

随机森林n_估计器的计算

用0填充没有覆盖范围的垃圾箱