当行数达到数万时,在 python 中交换 2D 列表的两列值的最有效方法是什么?

发布于 2025-01-12 15:42:25 字数 108 浏览 0 评论 0原文

例如,如果我有一个原始列表:

A B 
1 3
2 4

将变成

A B 
3 1
4 2

for example if I have an original list:

A B 
1 3
2 4

to be turned into

A B 
3 1
4 2

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

明月松间行 2025-01-19 15:42:25

两美分:

有 3 种方法

  1. 可以添加第三列 C,将 A 复制到 C,然后删除 A。这会占用更多内存。
  2. 您可以为一行中的值创建一个交换函数,然后将其包装到一个循环中。
  3. 您只需交换列的标签即可。这可能是最有效的方法。

two cents worth:

3 ways to do it

  1. you could add a 3rd column C, copy A to C, then delete A. This would take more memory.
  2. you could create a swap function for the values in a row, then wrap it into a loop.
  3. you could just swap the labels of the columns. This is probably the most efficient way.
三岁铭 2025-01-19 15:42:25

您可以使用 重命名

df2 = df.rename(columns={'A': 'B', 'B': 'A'})

输出:

   B  A
0  1  3
1  2  4

如果顺序很重要:

df2 = df.rename(columns={'A': 'B', 'B': 'A'})[df.columns]

输出:

   A  B
0  3  1
1  4  2

You could use rename:

df2 = df.rename(columns={'A': 'B', 'B': 'A'})

output:

   B  A
0  1  3
1  2  4

If order matters:

df2 = df.rename(columns={'A': 'B', 'B': 'A'})[df.columns]

output:

   A  B
0  3  1
1  4  2
情域 2025-01-19 15:42:25

使用 DataFrame.rename 使用字典交换列名,最后通过选择列来检查 orcer:

df = df.rename(columns=dict(zip(df.columns, df.columns[::-1])))[df.columns]
print (df)
   A  B
0  3  1
1  4  2

Use DataFrame.rename with dictionary for swapping columnsnames, last check orcer by selecting columns:

df = df.rename(columns=dict(zip(df.columns, df.columns[::-1])))[df.columns]
print (df)
   A  B
0  3  1
1  4  2
糖粟与秋泊 2025-01-19 15:42:25

您还可以简单地使用屏蔽来更改

import pandas as pd
df = pd.DataFrame({"A":[1,2],"B":[3,4]})

df[["A","B"]] = df[["B","A"]].values

df

   A  B
0  3  1
1  4  2

You can also just simple use masking to change the values.

import pandas as pd
df = pd.DataFrame({"A":[1,2],"B":[3,4]})

df[["A","B"]] = df[["B","A"]].values

df

   A  B
0  3  1
1  4  2
听,心雨的声音 2025-01-19 15:42:25

对于超过 2 列:

df = pd.DataFrame({'A':[1,2,3],'B':[4,5,6],'C':[7,8,9], 'D':[10,11,12]})
print(df)
'''
   A  B  C   D
0  1  4  7  10
1  2  5  8  11
2  3  6  9  12
'''
df = df.set_axis(df.columns[::-1],axis=1)[df.columns]
print(df)
'''
    A  B  C  D
0  10  7  4  1
1  11  8  5  2
2  12  9  6  3

for more than 2 columns:

df = pd.DataFrame({'A':[1,2,3],'B':[4,5,6],'C':[7,8,9], 'D':[10,11,12]})
print(df)
'''
   A  B  C   D
0  1  4  7  10
1  2  5  8  11
2  3  6  9  12
'''
df = df.set_axis(df.columns[::-1],axis=1)[df.columns]
print(df)
'''
    A  B  C  D
0  10  7  4  1
1  11  8  5  2
2  12  9  6  3
墨落成白 2025-01-19 15:42:25

我假设你的列表是这样的:

my_list = [[1, 3], [2, 4]]

所以你可以使用这个代码:

print([[each_element[1], each_element[0]] for each_element in my_list])

输出是:

[[3, 1], [4, 2]]

I assume that your list is like this:

my_list = [[1, 3], [2, 4]]

So you can use this code:

print([[each_element[1], each_element[0]] for each_element in my_list])

The output is:

[[3, 1], [4, 2]]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文