python - 同时选择和重命名列
问题描述
我环顾四周,但找不到解决方案。我们可以在R's 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:项目错误长度为 2 而不是 5。
我怎样才能做到这一点 ?
解决方案
有点晚了,也许你已经弄清楚了,但我遇到了同样的问题,这里的答案让我大部分时间都在使用我使用的解决方案。
“如何添加要选择的范围”的最短答案是将选定列的列表传递给重命名操作的结果数据框:
df.rename(columns = {"Com" : "Commander", "Sco":"Score"})[['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-08-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()]
选择新列就足够了。
推荐阅读
- c++ - 在地图中查找的功能,在地图中重载运算符
- html - 如何设置查看图像的自定义样式?
- jquery - Axios:成功后如何向输入添加 CSS 样式
- oracle - ora-01017 无效的用户名/密码登录被拒绝无法使用新连接登录
- python - 从 Python 列表中的数组生成带有标签的对
- python - 为什么 Python 和 Fortran77 会为这个分数返回不同的值?
- r - 怎么可能所有(`all`)都为真,而没有(`any`)同时为真?
- python - 从显示当前值并允许输入的 Web 表单字段中抓取文本
- python - NameError:未定义全局名称“working_dir”
- javascript - 如何从 this.state 中获取价值。未定义的属性