如果从@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相关问答推荐

零填充2D数组上的Numpy切片

预期LP_c_Short实例而不是_ctyles.PyCStructType

按日期和组增量计算总价值

如何在Pygame中绘制右对齐的文本?

Python:MultiIndex Dataframe到类似json的字典列表

使用Python C API重新启动Python解释器

已删除的构造函数调用另一个构造函数

如何在超时的情况下同步运行Matplolib服务器端?该过程随机挂起

使用Python Cerberus初始化一个循环数据 struct (例如树)(v1.3.5)

如果索引不存在,pandas系列将通过索引获取值,并填充值

分组数据并删除重复数据

对Numpy函数进行载体化

Pandas 在最近的日期合并,考虑到破产

在Python中处理大量CSV文件中的数据

Pandas 有条件轮班操作

海运图:调整行和列标签

输出中带有南的亚麻神经网络

如何从pandas的rame类继承并使用filepath实例化

不允许访问非IPM文件夹

如何使用两个关键函数来排序一个多索引框架?