python - 熊猫:有条件地将数据附加到列?
问题描述
我有两个需要合并的数据框。
其中n_df
有几列,但相关的是:
Statement Codes
Statement 1 CD.Ex-1
Statement 2 CD.Ex-2
Statement 3 CD.Ex-3
Statement 4 CD.Ex-4
Statement 5 CD.Ex-5
{
"Statement": ["Statement 1", "Statement 2", "Statement 3",
"Statement 4", "Statement 5",],
"Codes": ["CD.Ex-1", "CD.Ex-2", "CD.Ex-3","CD.Ex-4","CD.Ex-5",],
...
}
在p_df
我有 3 列:
Statement Codes Other_Codes
Statement A CD.Ex-A NC.a
Statement X CD.Ex-2 NC.b
Statement B CD.Ex-B NC.c
Statement 4 CD.Ex-4 NC.d
Statement C CD.Ex-C NC.e
{
"Statement": ["Statement A", "Statement X", "Statement B",
"Statement 4", "Statement C",],
"Codes": ["CD.Ex-A", "CD.Ex-2", "CD.Ex-B","CD.Ex-4","CD.Ex-C",],
"Other_Codes": ["NC.a", "NC.b", "NC.c","NC.d","NC.e",],
}
所以我需要做的是:
- 合并数据框
Codes
- 如果在(如 CD.Ex-A)
Codes
中不存在,则将(p_df) 附加到(n_df)n_df
Codes
Codes
- 如果
Codes
不存在n_df
(例如CD.Ex-A),则将关联的Statement
(p_df)附加到Statement
(n_df)
到目前为止,我已经完成了new_df = pd.merge(n_df, p_df, how='outer', on='Codes')
。但是,这样做有一些问题:我最终得到了两Statement
列。为了减轻这种情况,我做了
s_df = p_df[['Other_Codes', 'Statement']]
p_df = p_df.drop('Statement', 1)
我的想法是我可以做另一个合并,Other_Codes
添加Statement
回来?但我无法成功地做到这一点。我总是以两Statement
列结束。
另一个问题(可能相关)是每个表中的“语句”不一定对齐。在我上面的示例中,代码 CD.Ex-2 的语句位于Statement 2
inn_df
和Statement X
in 中p_df
。如果语句中存在冲突,我需要 n_df 优先。
解决方案
用于combine_first
将值从 更新Statement (p_df)
为Statement (n_df)
。仅当 n_df 值为 NaN 时才会更新值。
out = n_df.merge(p_df, on='Codes', how='outer', suffixes=('', '_'))
out = out.assign(Statement=out['Statement'].combine_first(out['Statement_'])) \
.drop(columns='Statement_')
输出:
>>> out
Statement Codes Other_Codes
0 1.0 CD.Ex-1 NaN
1 2.0 CD.Ex-2 NC.b
2 3.0 CD.Ex-3 NaN
3 4.0 CD.Ex-4 NC.d
4 5.0 CD.Ex-5 NaN
5 A CD.Ex-A NC.a
6 B CD.Ex-B NC.c
7 C CD.Ex-C NC.e
推荐阅读
- c - 在 c 上按位和 unsigned int 得到错误答案?
- javascript - 我只想为那些拥有 ManageMessages 权限的角色创建我的 nuke 命令。我该怎么做?
- javascript - 如何在网上搜索错误已经发布
- ruby-on-rails - HTTP_ORIGIN 总是返回 nil
- loops - 在 python 的 for 循环中更新 matplotlib 图形
- javascript - 当元素存在时'classList'属性返回null?
- c++ - 用qt绘制gps点的最佳方法
- java - ChartJS/High Charts Radar chart - 悬停时出现的每个类别的不同径向轴标签
- flutter - 如何在颤振中使用没有项目构建器的索引
- azure - Azure AD 高级版 P1/P2