pandas - Pandas 中的条件合并
问题描述
我的问题很简单,我正在使用 pd.merge 合并两个 df 。这是代码行:
pivoted = pd.merge(pivoted, concerned_data, on='A')
每当一行的 A 列值为空时,我都想要 on='B' 。有没有可能的方法来做到这一点?
编辑:
例如,如果
df1: A | B |randomval
1 | 1 | ty
Nan| 2 | asd
df2: A | B |randomval2
1 | Nan| tyrte
3 | 2 | asde
因此,如果 on='A' 并且值为 Nan 是任何 df (对于单行),我只希望 on='B' 用于该行
谢谢!
解决方案
您可以在其中创建第三列,pandas.DataFrame
其中包含此逻辑并在此上合并。
例如,创建虚拟数据
df1 = pd.DataFrame({"A" : [1, None], "B" : [1, 2], "Val1" : ["a", "b"]})
df2 = pd.DataFrame({"A" : [1, 2], "B" : [None, 2], "Val2" : ["c", "d"]})
创建c
具有此逻辑的列
df1["C"] = pd.concat([df1.loc[~df1.A.isna(), "A"], df1.loc[df1.A.isna(), "B"]],ignore_index=False)
df2["C"] = pd.concat([df2.loc[~df2.A.isna(), "A"], df2.loc[df2.A.isna(), "B"]],ignore_index=False)
最后,在这个公共列上合并,只包含你的值列
df3 = pd.merge(df1[["Val1","C"]], df2[["Val2","C"]], on='C')
In [27]: df3
Out[27]:
Val1 C Val2
0 a 1.0 c
1 b 2.0 d
推荐阅读
- java - 缩小 -Xms 改进了 GC 时间
- reactjs - 无法对未安装的组件执行 React 状态更新
- javascript - 没有对象解决方案的动态键 - MongoDB findOneAndUpdate 调用
- java - JLaTeXMath 和 FXGraphics2D 无法正确显示积分符号
- c# - 在 Entity Framework Core 中替换实体集合会导致 DbContext 在未保存到 db 时获取新值。如何重新加载收藏?
- java - 在Java中的方法内部调用另一个方法
- python - 使用 openpyxl 时无法将 [1, 2, 3, 4, 5] 转换为 Excel
- javascript - 将 UTC 字符串日期转换为 UTC 日期
- powershell - 在 PowerShell 中对 TCP 或 UDP 协议进行分组并按字符编号对其进行排序
- reactjs - 从 react-native-svg 中的形状创建文本剪切效果