根据最新列创建一个新列,并在数据框中添加一个值-Pandas

时间:2020-02-24 13:28:10

标签: python pandas

我有一个看起来像这样的数据框:

orderID         m1              m2              m3      
1       2020-03-04      2020-03-04             NaT
2       2020-03-08             NaT             NaT

我想创建一个新列,显示可用于订单的最新里程碑(mn)。

输出看起来像这样

orderID         m1              m2              m3          last_m_available
1       2020-03-04      2020-03-04             NaT                        m2
2       2020-03-08             NaT             NaT                        m1

我将如何使用python做到这一点?

2 个答案:

答案 0 :(得分:2)

您可以交换列顺序,测试不丢失值并使用DataFrame.idxmax

#if orderID is not index
df = df.set_index('orderID')

df = df.apply(pd.to_datetime)
df['last_m_available'] = df.iloc[:, ::-1].notna().idxmax(axis=1)
print (df)
                m1         m2  m3 last_m_available
orderID                                           
1       2020-03-04 2020-03-04 NaT               m2
2       2020-03-08        NaT NaT               m1

如果可能,某些行仅缺少值:

df = df.apply(pd.to_datetime)
mask = df.iloc[:, ::-1].notna()
df['last_m_available'] = np.where(mask.any(axis=1), mask.idxmax(axis=1), np.nan)
print (df)
                m1         m2  m3 last_m_available
orderID                                           
1       2020-03-04 2020-03-04 NaT               m2
2              NaT        NaT NaT              NaN

答案 1 :(得分:0)

您可以使用dataframe.dropna()来清除列表中的空列。

cols = df.dropna().columns
df['last_m_available'] = cols
print(df)

                m1         m2  m3 last_m_available
orderID                                           
1       2020-03-04 2020-03-04 NaN               m2
2       2020-03-08        NaN NaN               m1