创建一个新列以显示 Pandas 中最后一次支出的月份
Create a new columns to show the month of last spend in Pandas
我正在处理支出数据,我想在其中查看当年和上一年支出的最后一个月。如果这几年没有支出,那么,我假设支出的最后一个月是 2020 年 12 月。
我的数据是这样的
如数据所示,月份已经以列的形式存在。
我想创建一个新列 last_txn_month
,它给出了上个月的支出时间。所以输出应该是这样的:
假设您的 DataFrame 看起来像:
df = pd.DataFrame([[1, np.nan, np.nan, 3, np.nan], [10, 11, 12, 13, 14],
[101, 102, np.nan, np.nan, np.nan],
[110, np.nan, np.nan, 111, np.nan]],
columns=[*'abcde'])
然后你可以使用notna
来创建boolean DataFrame;然后 apply
一个 lambda 函数,过滤每行的 non-NaN 值的最后一列名称:
df['last'] = df.notna().apply(lambda x: df.columns[x][-1], axis=1)
输出:
a b c d e last
0 1 NaN NaN 3.0 NaN d
1 10 11.0 12.0 13.0 14.0 e
2 101 102.0 NaN NaN NaN b
3 110 NaN NaN 111.0 NaN d
我正在处理支出数据,我想在其中查看当年和上一年支出的最后一个月。如果这几年没有支出,那么,我假设支出的最后一个月是 2020 年 12 月。
我的数据是这样的
如数据所示,月份已经以列的形式存在。
我想创建一个新列 last_txn_month
,它给出了上个月的支出时间。所以输出应该是这样的:
假设您的 DataFrame 看起来像:
df = pd.DataFrame([[1, np.nan, np.nan, 3, np.nan], [10, 11, 12, 13, 14],
[101, 102, np.nan, np.nan, np.nan],
[110, np.nan, np.nan, 111, np.nan]],
columns=[*'abcde'])
然后你可以使用notna
来创建boolean DataFrame;然后 apply
一个 lambda 函数,过滤每行的 non-NaN 值的最后一列名称:
df['last'] = df.notna().apply(lambda x: df.columns[x][-1], axis=1)
输出:
a b c d e last
0 1 NaN NaN 3.0 NaN d
1 10 11.0 12.0 13.0 14.0 e
2 101 102.0 NaN NaN NaN b
3 110 NaN NaN 111.0 NaN d