gpt4 book ai didi

python - 如何计算各个列的变化值 - Pandas Dataframe

转载 作者:行者123 更新时间:2023-11-28 19:41:47 35 4
gpt4 key购买 nike

我试图随着时间的推移查看不同唯一 ID 的特定功能,并将其存储在 Pandas 的数据框中。

这是一个要复制的代码示例:

d = {'id': ['adam', 'john'],'t1': ['A', 'A'], 't2': ['A', 'B'], 't3': ['A', 'B'], 't4': ['B', 'A']}
df = pd.DataFrame(data=d)
df

id t1 t2 t3 t4
0 adam A A A B
1 john A B B A

我想计算特定 id 的 t* 值变化的次数。示例:

John 值从 A 开始移动到 B(一次更改),然后停留在 B(没有更改),然后在 t4 移动到 A(第二次更改),因此总共有两次更改。

预期输出如下:

     id t1 t2 t3 t4  toatal_change
0 adam A A A B 1
1 john A B B A 2

最佳答案

s = df[df.columns[1:]]
df.assign(total_change=s.ne(s.shift(axis=1).bfill(1)).sum(1))

输出:

     id t1 t2 t3 t4  total_change
0 adam A A A B 1
1 john A B B A 2

这将比它的 numpy 等价物慢:

df = pd.concat([df]*10000)
s = df[df.columns[1:]]
v = df.filter(regex='^t\d+').values

%%timeit
df.assign(total_change=s.ne(s.shift(axis=1).bfill(1)).sum(1))
21.2 ms ± 256 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

%%timeit
df.assign(total_change=(v[:, 1:] != v[:, :-1]).sum(1))
1.9 ms ± 8.53 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

关于python - 如何计算各个列的变化值 - Pandas Dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51733671/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com