- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个大型 DataFrame (Output_Frame),其中的列由两个字符串的列表定义:
output_frame.columns
Out[14]:
MultiIndex([('@:M3WRLD', 'AS1GRO'),
('@:M3WRLD', 'AS1GRO'),
('@:AFM2M2', 'AS1GRO'),
('@:AFM2E2', 'AS1GRO'),
...
names=['Instrument', 'Field'], length=903)
我想将这些列重命名为另一个 DataFrame(键)中包含的单个字符串:
Name Series_Code Datatype_Code
0 MSCI AC WORLD - CAL FY1 GROWTH SAL @:M3WRLD AS1GRO
1 MSCI AC WORLD - FY2 YOY GROWTH SAL @:M3WRLD AS2GRO
2 MSCI AC WORLD - FY3 YOY GROWTH SAL @:M3WRLD AS3GRO
3 MSCI AC WORLD - CAL FY1 YOY GROWTH @:M3WRLD AF1GRO
重申一下:Output_Frame 的列名称是关键帧中的“Series_Code”和“Datatype_Code”字段。我想根据 Key 中的名称变量重命名 Output_Frame 中的列名称。
例如 Output_Frame 中的第一列是:
('@:M3WRLD', 'AS1GRO')
我希望它变成:
MSCI AC WORLD - CAL FY1 GROWTH SAL
下面的语法是不正确的,但我相信逻辑是可行的。
for col in output_frame.columns:
for row in key.rows:
if (key[row, 'Series_Code'] == col[0]) && (key[row, 'Datatype_Code'] == col[1]):
output_frame.column(col) = key[row, 'Type']
如果您提出修复此语法的建议或建议一种更好的方法来完成此任务(不涉及迭代),我将不胜感激。我是 Python 和 pandas 的新手,非常感谢您的帮助。
最佳答案
您基本上希望将数据帧 output_frame
的 2 级多索引列更改为单级索引列,其中值映射到 key
数据帧中的值。我想说这是一个危险的逻辑。您需要确保多索引的每个配对项都存在于 key
数据框中。不过,它确实能够做到。假设 key
数据帧名为 df_key
。您可以执行以下操作:
Sample `output_frame` bases on your provided `multiindex` columns
Instrument @:M3WRLD @:AFM2M2 @:AFM2E2
Field AS1GRO AS1GRO AS1GRO AS1GRO
0 70 81 74 48
df_key
Out[539]:
Name Series_Code Datatype_Code
0 MSCI AC WORLD - CAL FY1 GROWTH SAL @:M3WRLD AS1GRO
1 MSCI AC WORLD - FY2 YOY GROWTH SAL @:M3WRLD AS2GRO
2 MSCI AC WORLD - FY3 YOY GROWTH SAL @:M3WRLD AS3GRO
3 MSCI AC WORLD - CAL FY1 YOY GROWTH @:M3WRLD AF1GRO
#======================================================================
#create a dictionary from `df_key`
d = df_key.set_index(['Series_Code', 'Datatype_Code']).Name.to_dict()
##or
d = {tuple(v): k for k, *v in zip(*map(df_key.get, df_key))}
Out[526]:
{('@:M3WRLD', 'AS1GRO'): 'MSCI AC WORLD - CAL FY1 GROWTH SAL',
('@:M3WRLD', 'AS2GRO'): 'MSCI AC WORLD - FY2 YOY GROWTH SAL',
('@:M3WRLD', 'AS3GRO'): 'MSCI AC WORLD - FY3 YOY GROWTH SAL',
('@:M3WRLD', 'AF1GRO'): 'MSCI AC WORLD - CAL FY1 YOY GROWTH'}
#Use map on `output_dataframe.columns` to flatten and change its values to values from dictionary created from `df_key`
output_frame.columns = output_frame.columns.map(lambda x:
d.get(tuple(x), f'{x[0]} - {x[1]}'))
Out[534]:
MSCI AC WORLD - CAL FY1 GROWTH SAL MSCI AC WORLD - CAL FY1 GROWTH SAL \
0 70 81
@:AFM2M2 - AS1GRO @:AFM2E2 - AS1GRO
0 74 48
<小时/>
注意:正如我所说,您必须确保多索引的每个配对项都存在于key
数据框中。您的示例 output_frame
具有多索引 ('@:AFM2M2', 'AS1GRO')
和 ('@:AFM2E2', 'AS1GRO')
,但 df_key 没有这些组合。因此,我选择将它们展平为 @:AFM2M2 - AS1GRO
和 @:AFM2E2 - AS1GRO
而不是分配 NaN
或 NoNe
到他们的位置。其次,您的示例 output_frame
具有重复的多索引列,因此映射也映射到重复的值。
关于Python 数据帧 : rename columns from another DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59462406/
我已经阅读了几个小时的 rsync 文档,但我无法弄清楚如何向 rsync 传达如何仅重命名(而不是重新上传文件夹及其内容)目标文件夹,当它们在资源。 我正在使用 SSH 连接到目的地,本地文件夹是源
我正在使用 MySQL。这是一个例子,我想将表 A 重命名为 B,那么以下语句之间有什么区别: alter table A rename to B; 还有这个: rename table A to B
当我在解决方案资源管理器中选择文件或目录并按下 F2 键时,我试图让 Visual Studio 重命名文件。但是,我还希望 Visual Studio 在我按 F2 时进行重构重命名,并且我在编辑器
我无法让 objcopy --rename-sym 工作。 在一个新的 Android 项目中,我创建了目录 jni 和文件 stub.c: #include #include "dlog.h" j
MKPinAnnotationView 在 iOS 15 中重命名为 MKMarkerAnnotationView。 在 iOS 14 之前,我将 MKPinAnnotationView 子类化为 c
如果您调用 os.rename提供不存在的文件或目录,OSError通过将其设置为 None 来忽略文件名.这是 2.6 中的错误,已在某些更高版本中修复? 您只需执行以下操作即可重现该问题: pyt
假设我的前面板有 100 个按钮,名称为“按钮 1”...“按钮 100”。如何快速将它们全部重命名为“Push Button 1”...“Push Button 100”? 最佳答案 与 Dave_
考虑下面这个愚蠢的例子 theory meta_all imports Main begin lemma strict_subset: "⟦ A ⊂ B ⟧ ⟹ ∃a ∈ B. a ∉ A" appl
我正在尝试使用以下代码重命名节点,我需要将节点的 ID 和新名称传递给 server.aspx 如何获取节点的新名称 如何将这两个值传递到 server.aspx 页面 谢谢 .bind("re
我需要一个脚本,允许我将文件名剥离到文件夹中的文件,并将文件夹名称应用于文件,并在每个文件名的末尾添加一个递增的数字。 因此文件名在其原始状态下看起来像这样: gdgeregdja34gtj.jpg
以前,在突出显示 Java 文件中的变量名称后使用 ALT+COMMAND+R 组合键将进入重命名重构模式。现在,组合键将突出显示的文本替换为注册商标符号。 如何让组合键进入重命名重构模式而不是插入符
我有一个 Linux Qt 应用程序,它创建了一些 QThreads . 我知道当你创建一个线程时,它会继承父名,当我使用 htop 时我可以看到它。或 ps ax -L . 是否可以通过像 ps a
在处理器中,为什么我们不能简单地增加寄存器的数量,而不是拥有一个巨大的重新排序缓冲区并映射寄存器以解决名称依赖关系? 最佳答案 原因很多。 首先,我们经常设计微架构来执行现有架构的程序。添加寄存器会改
rename如果 newname 指向不同的驱动器,实际上会复制文件(至少在 Windows 10 平台上)。 有没有办法避免这种情况?我希望它在这种情况下失败。 假设我要移动 100 GB 的文件。
从业务角度来看,问题就出在这里 我们有许多人们使用的共享文件夹,我们称之为//shared/the/drive。但是,我们的服务器可能知道这个共享驱动器是其他名称,可能是 //ir83pn3br8mw
我从 XML 文件中读出它们的类别,然后重命名并保存它们的年份。因此,文件“XYZ.xml”现在是“News_2014.xml”。 问题是,从 2014 年开始,有多个 XML 文件的类别为“新闻”。
假设您有一个名为 foo 的文件包含一些确定的字节序列 X ,并且您想自动将其替换为名为 bar 的文件包含一个字节序列 Y .这通常使用 rename() 完成系统调用---在这种情况下,通过调用r
我正在尝试重命名用户指定目录中的一堆文件,但它似乎只在用户指定程序运行的目录时才有效。例如,从命令行运行时: ./a.out 。 “NewName.txt” 将起作用,而 ./a.out .. "Ne
这个问题可能看起来有点奇怪,但我会尝试对用例进行一些争论。 假设您有一个二维(笛卡尔)场的通用实现,其维度为 dim1 和 dim2,坐标为 c1 和 c2。 struct Field2D { s
我正在使用一个 php 应用程序,其中有一行用于移动文件。我将该方法包含在一个 try...catch block 中,因此,如果抛出错误,可以管理回滚系统。但是从未捕获到异常,那么重命名会引发任何类
我是一名优秀的程序员,十分优秀!