python - 比较不同大小的数据框,如果满足条件则创建一个新的
问题描述
我需要帮助来解决以下问题:
我有两 (2) 个不同大小的数据框。我需要比较这些值,如果满足条件,请替换 Dataframe 1 中的值。
如果 Dataframe 1 中 Material 和 Char 的值是 =“Y”,我需要从 Dataframe 2 中获取“必需或可选”值。如果是必需的,那么我将“Y”替换为“Y_REQD”,否则如果它是可选然后将“Y”替换为“Y_OPT”。
我一直在使用 For 循环,但现在代码变得太复杂了,这暗示我这可能不是最好的方法。
提前致谢。
解决方案
大多同意@WeNYoBen 的回答。但要使其完全正确,需要使用 df.replace 修改 dataframe2。
精简版:
df1=df1.replace({'Y':'Y_'})+df2.replace({'Rqd': 'REQD', 'Opt': 'OPT'}).pivot(*df2.columns).reindex_like(df1).fillna('')
长版:
# break short into steps
# 1. replace
df2 = df2.replace({'Rqd': 'REQD', 'Opt': 'OPT'})
# 2. pivot
df2 = df2.pivot(*df2.columns)
# 3. reindex
df2 = df2.reindex_like(df1)
# 4. fillna(cleanup df with string form)
df2 = df2.fillna('')
# 5. map on df1 and add up with df2
df1=df1.replace({'Y':'Y_'})+df2
希望能帮助到你。
推荐阅读
- c - 为什么 gcc 和 clang 不对库函数的未使用结果发出警告?
- inno-setup - Inno Setup中ComboBox更改后在下一个屏幕上动态显示控件和内容?
- vba - VBA for ms-WORD - 基于对列表在所有单词实例上添加带有 VBA 的语音指南
- java - 无法转换 [com.sun.proxy.$ProxyXX ScopedObject 类型的值
- android - 能否在首次打开应用前获取用户详细信息
- c++ - 在代码中找不到函数实现
- r - 如何在 R 中形成带有计数的日期间隔?
- node.js - Socket.io 使用使用 Node.JS 集群和 PM2
- javascript - 使用自定义选择显示特定内容
- java - Gmail Api 给出了超出用户速率限制的错误