gpt4 book ai didi

python - 同时选择和重命名列

转载 作者:行者123 更新时间:2023-12-02 11:37:15 24 4
gpt4 key购买 nike

我环顾四周,但找不到解决方案。在 R 的 dplyr 中,我们可以在一行代码中选择并重命名列。

select(Com=Commander,Sco=Score)

我正在尝试在 pandas 中做同样的事情,但尚未找到可行的解决方案!

假设我们有这个示例数据

# Create an example dataframe
data = {'Commander': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
'Date': ['2012, 02, 08', '2012, 02, 08', '2012, 02, 08', '2012, 02, 08', '2012, 02, 08'],
'Score': [4, 24, 31, 2, 3]}
df = pd.DataFrame(data, index = ['Cochice', 'Pima', 'Santa Cruz', 'Maricopa', 'Yuma'])
df


Commander Date Score
Cochice Jason 2012, 02, 08 4
Pima Molly 2012, 02, 08 24
Santa Cruz Tina 2012, 02, 08 31
Maricopa Jake 2012, 02, 08 2
Yuma Amy 2012, 02, 08 3

并且想要像这样选择和重命名 Commander 和 Score 列

df[['Com'=='Commander','Sco'=='Score']]

ValueError: Item wrong length 2 instead of 5.

我怎样才能做到这一点?

最佳答案

有点晚了,也许您已经弄清楚了这一点,但我遇到了同样的问题,这里的答案让我大致了解了我使用的解决方案。

“如何添加要选择的范围”的最短答案是将所选列的列表传递给重命名操作的结果数据框:

df.rename(columns = {"Commander": "Com", "Score": "Sco"})[['Com', 'Sco']]

Com Sco
Cochice Jason 4
Pima Molly 24
Santa Cruz Tina 31
Maricopa Jake 2
Yuma Amy 3

但是重写列名有点乏味,对吧?所以你可以用字典初始化重命名:

selector_d = {'Commander': 'Com', 'Score': 'Sco'}

并将其传递给重命名选择操作:

df.rename(columns=selector_d)[[*selector_d.values()]]
Com Sco
Cochice Jason 4
Pima Molly 24
Santa Cruz Tina 31
Maricopa Jake 2
Yuma Amy 3

我的场景与此接近 - 我不想重命名某些列,但我确实想选择它们。这可以通过在重命名/选择字典中包含列但使用相同的名称来完成。

这是添加了另一列的整个过程:

data = {
'Commander': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
'Date': ['2012, 02, 08', '2012, 02, 08', '2012, 02, 08',
'2012, 02, 08', '2012, 02, 08'],
'Score': [4, 24, 31, 2, 3],
'Team': ['Green', 'Yellow', 'Green', 'Yellow', 'Yellow'],
}
df = pd.DataFrame(data, index=['Cochice', 'Pima', 'Santa Cruz', 'Maricopa', 'Yuma'])
df

Commander Date Score Team
Cochice Jason 2012, 02, 08 4 Green
Pima Molly 2012, 02, 08 24 Yellow
Santa Cruz Tina 2012, 02, 08 31 Green
Maricopa Jake 2012, 02, 08 2 Yellow
Yuma Amy 2012, 02, 08 3 Yellow

selector_d = {'Team': 'Team', 'Commander': 'Com', 'Score': 'Sco'}

df.rename(columns=selector_d)[[*selector_d.values()]]

Team Com Sco
Cochice Green Jason 4
Pima Yellow Molly 24
Santa Cruz Green Tina 31
Maricopa Yellow Jake 2
Yuma Yellow Amy 3

如您所见,这还允许对最终数据帧中的列进行重新排序。

根据 @Hedge92 的评论于 2021 年 8 月 28 日编辑

实际上,您不需要双括号来从 selector_d.values() 选择列,如下所示:

df.rename(columns=selector_d)[[*selector_d.values()]].equals(
df.rename(columns=selector_d)[selector_d.values()]
)
True

因此,df.rename(columns=selector_d)[selector_d.values()]足以选择新列。

关于python - 同时选择和重命名列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57417520/

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