gpt4 book ai didi

python - 如何在 pandas 数据框中交换 0 和 1 值?

转载 作者:太空狗 更新时间:2023-10-30 01:57:03 26 4
gpt4 key购买 nike

我正在使用一个 pandas 数据框,它有一列全是 0 和 1,我正在尝试切换每个值(即所有 0 变为 1,所有 1 变为 0)。有没有简单的方法可以做到这一点?

最佳答案

使用 replace :

df = df.replace({0:1, 1:0})

或更快 numpy.logical_xor :

df = np.logical_xor(df,1).astype(int)

或更快:

df = pd.DataFrame(np.logical_xor(df.values,1).astype(int),columns=df.columns, index=df.index)

示例:

np.random.seed(12)
df = pd.DataFrame(np.random.choice([0,1], size=[10,3]))
print (df)
0 1 2
0 1 1 0
1 1 1 0
2 1 1 0
3 0 0 1
4 0 1 1
5 1 0 1
6 0 0 0
7 1 0 0
8 1 0 1
9 1 0 0

df = df.replace({0:1, 1:0})
print (df)
0 1 2
0 0 0 1
1 0 0 1
2 0 0 1
3 1 1 0
4 1 0 0
5 0 1 0
6 1 1 1
7 0 1 1
8 0 1 0
9 0 1 1

另一种解决方案:

df = (~df.astype(bool)).astype(int)
print (df)
0 1 2
0 0 0 1
1 0 0 1
2 0 0 1
3 1 1 0
4 1 0 0
5 0 1 0
6 1 1 1
7 0 1 1
8 0 1 0
9 0 1 1

时间:

np.random.seed(12)
df = pd.DataFrame(np.random.choice([0,1], size=[10000,10000]))
print (df)

In [69]: %timeit (np.logical_xor(df,1).astype(int))
1 loop, best of 3: 1.42 s per loop

In [70]: %timeit (df ^ 1)
1 loop, best of 3: 2.53 s per loop

In [71]: %timeit ((~df.astype(bool)).astype(int))
1 loop, best of 3: 1.81 s per loop

In [72]: %timeit (df.replace({0:1, 1:0}))
1 loop, best of 3: 5.08 s per loop

In [73]: %timeit pd.DataFrame(np.logical_xor(df.values,1).astype(int), columns=df.columns, index=df.index)
1 loop, best of 3: 350 ms per loop

编辑:这应该更快:

import numexpr as ne
arr = df.values
df = pd.DataFrame(ne.evaluate('1 - arr'),columns=df.columns, index=df.index)

关于python - 如何在 pandas 数据框中交换 0 和 1 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45094948/

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