如果从@mozway找到了一个很好的解决方案,可以将实体移到列的右侧:

Python / Pandas: Shift entities of a row to the right (end)

如果最后一列中有NaN(列数可能不同),我希望将所有列右移到数据框的末尾,使其如下所示:

该解决方案运行良好:

enter image description here

import numpy as np
import pandas as pd

data = {
    'Customer': ['A', 'B', 'C'],
    'Date1': [10, 20, 30],
    'Date2': [40, 50, np.nan],
    'Date3': [np.nan, np.nan, np.nan],
    'Date4': [60, np.nan, np.nan]
}

df = pd.DataFrame(data)

out = (df
   .set_index('Customer', append=True)
   .pipe(lambda d: d.mask(d.iloc[:, -1].isna(),
                          d.transform(lambda x : sorted(x, key=pd.notnull), axis=1)
                         )
        )
   .reset_index('Customer')
)

但是,对于现有的解决方案,有没有办法实现过滤器,只移位包含单词main的行,例如Customer?它应该是这样的:由于单词中的main,Cucumber.main被移位了.草莓.水果不是,因为主菜不见了.

Desired Output: enter image description here

推荐答案

您可以将新条件添加到具有Series.str.containsDataFrame.mask:

out = (df
   .set_index('Customer', append=True)
   .pipe(lambda d: d.mask(d.iloc[:, -1].isna() &
                          df['Customer'].str.contains('main').to_numpy(),
                          d.transform(lambda x : sorted(x, key=pd.notnull), axis=1)
                         )
        )
   .reset_index('Customer')
)

或使用MultiIndex x Index.get_level_values的级别:

out = (df
   .set_index('Customer', append=True)
   .pipe(lambda d: d.mask(d.iloc[:, -1].isna() & 
                          d.index.get_level_values('Customer').str.contains('main'),
                          d.transform(lambda x : sorted(x, key=pd.notnull), axis=1)
                         )
        )
   .reset_index('Customer')
)

Python相关问答推荐

try 理解PyTorch运行错误:try 再次向后遍历图表

如何在Polars DataFrame中使用`isin‘?

Django在两个领域进行连接

根据来自数据帧的特定迭代数合并数据帧

Django URL中不需要的空格

Django ManyToMany不保存

Django按字段上的子字符串分组

如何防范误导标准库?

使用Python删除或更新Excel中的特定图像

从源代码构建Python,已构建但未导入_sqlite3

根据每个组中唯一值的数量,按组延迟填充Python Polars中的空值

Df.at更新DataFramePandas 的多个索引

Jax VMAP返回的是不可迭代的怎么可能?

如何从Pandas 中的行中提取列

从类属性中提取注释的Python中的regex/算法

作为时间函数的绘图数组

读取Pandas 数据帧中的多个CSV文件

如何在短时间内保持数据包以模拟网络滞后?

将XGBoost赋形值转换为`SHAP`';S解释对象

如何验证Polars DataFrame中具有相应数据类型的特定列是否存在?