python - 如何使用 pandas 记录跨列是否发生特定更改?
问题描述
这是我用来创建数据框的代码:
data = [['Anna',1,1,2,2,3],['Bob',2,2,3,1,1],['Chloe',1,1,2,3,4], ['David',1,2,2,2,1]] df = pd.DataFrame(data, columns = ['Name', 'A','B','C','D','E'])
我想创建一个列来说明是否在整个表中发生了特定更改。例如,对于这个数据集,我希望该列表示该人是从“1 到 2 到 3”还是“1 到 2 到 3 到 4”。因此,对于这个特定的数据框,Anna 和 Chloe 都会在该列中有一个指示符来传达他们经历了这些变化。
预期结果应在数据框中具有以下列:
df['Column'] = ['1-2-3','NA','1-2-3-4','NA']
解决方案
您可以采取以下方法:
cond=(~m.diff(axis=1).lt(0).any(axis=1))
df=df.assign(new_col=np.where(cond,
m.apply(lambda x: '-'.join(map(str,(dict.fromkeys(x).keys()))),axis=1),'NA'))
print(df)
Name A B C D E new_col
0 Anna 1 1 2 2 3 1-2-3
1 Bob 2 2 3 1 1 NA
2 Chloe 1 1 2 3 4 1-2-3-4
3 David 1 2 2 2 1 NA
推荐阅读
- logical-operators - Logisim 相等时比较器电路输出错误
- r - 如何从 R 中查询 HR Schema?
- asp.net-mvc - 如何在 Web API 中实现方法
- python - 如何使用 Python 和 pdf417 同时创建多个条形码
- c++ - HTTP 请求中的标头名称无效
- vb.net - 从 vb.net 运行 bash 命令
- node.js - request 和 axios 不适用于 sam 调试 lambda 函数
- angular - NullInjectorError:没有提供 DecimalPipe
- c# - 如何按具有特定大小或字体的标题拆分 PDF
- php - Discord API / Restcord : 创建私人频道