python - 如何获取熊猫中最后一个非零值的列名?
问题描述
我有一些顺序特征的数据,这些特征必须在其他特征出现之前出现。我想获取用户访问的最终页面。
设置
import numpy as np
import pandas as pd
df = pd.DataFrame({'user': [10,15,17],
'sex': ['M','M','F'],
'home_page': [1,1,1],
'search_page': [1,0,1],
'confirmation_page': [1,0,0],
'payment_page':[1,0,0]})
print(df)
user sex home_page search_page confirmation_page payment_page
0 10 M 1 1 1 1
1 15 M 1 0 0 0
2 17 F 1 1 0 0
问题
如何获取名称为“final_page”的新列,该列具有访问的最终页面的名称。
必填答案
df['final_page'] = ['payment_page','home_page','search_page'] # this is not answer,
# The new column should have these values.
我的尝试
a = df.iloc[:,2:].to_numpy()
np.trim_zeros(a)
相关链接
解决方案
您可以使用dot
条件 where 列的乘积,df!=0
然后拆分并获取最后一列:
m=df.set_index(['user','sex'],append=True)
df['final_page']=(m.ne(0).dot(m.columns+ ',').str.rstrip(',').str.split(',')
.str[-1].droplevel(['user','sex']))
print(df)
或者:
df['final_page']=m.apply(pd.Series.last_valid_index,axis=1).reset_index(drop=True)
user sex home_page search_page confirmation_page payment_page \
0 10 M 1 1 1 1
1 15 M 1 0 0 0
2 17 F 1 1 0 0
final_page
0 payment_page
1 home_page
2 search_page
推荐阅读
- css - Material UI 中的 GridListTile 项目未对齐
- c# - 具有已知指纹的 Renci.SshNet 预接受密钥
- java - CAS的高可用配置
- r - 从矩阵创建 R 中的直方图
- postgresql - Jpql:没有分组依据
- c# - nHibernate HasMany 与连接表
- python - Python 日期时间字符串 'Wed 10:00 AM UTC+02' 到日期
- build - Gitlab CI 中卫生的树外构建
- c# - 如何在没有第三方应用程序的情况下使用 SSIS 脚本任务解压缩受密码保护的文件?
- python-3.x - Keras 中的 LSTM 输入和输出