python - 使用 pandas 从 2 列中提取现有和不存在的值
问题描述
我是 pandas 的新手,我正在尝试获取两列中存在的值列表、A 列中存在的值、B 列中仅存在的值。
我的 .csv 文件如下所示:
A B
AAA ZZZ
BBB BBB
CCC EEE
DDD FFF
EEE AAA
DDD
GGG HHH
JJJ
列的长度不同,我的结果将是 3 个列表或一个 csv,我将输出 3 个列,一个用于两个列中存在的项目,一个用于仅存在于 A 列中的项目,一个用于仅存在于 B 列中的项目。
IN BOTH IN COLUMN A IN COLUMN B
AAA CCC ZZZ
BBB GGG FFF
DDD JJJ HHH
EEE
(empty one)
我曾尝试使用 .isin() 模块,但它返回 true 或 false 而不是实际列表。
existing_in_both = df_column_a.isin(df_column_b)
而且我不知道应该如何尝试提取仅存在于 A 列或 B 列中的值。
谢谢你的建议。
我的实际 .csv 具有以下内容:
id clickout_id timestamp click_id click_type
1 123abc 2019-11-25 c51c56d1 1
1 123dce 2019-11-25 c51c5fs1 12
和其他文件看起来像这样:
timestamp id gid type
2019-11-25 1 c51c56d1 2
2019-11-25 1 c51c5fs1 2
我正在尝试比较第一个文件中的 click_id 和第二个文件中的 gid 。
当我使用您的答案打印出来时,我将标题名称作为答案而不是列中的值。
解决方案
使用set
s 与交集和差异,然后为 newDataFrame
使用Series
,因为输出的长度不同:
a = set(df.A)
b = set(df.B)
df = pd.DataFrame({'IN BOTH': pd.Series(list(a & b)),
'IN COLUMN A': pd.Series(list(a - b)),
'IN COLUMN B': pd.Series(list(b - a))})
print (df)
IN BOTH IN COLUMN A IN COLUMN B
0 DDD CCC FFF
1 BBB GGG ZZZ
2 AAA JJJ HHH
3 NaN NaN
4 EEE NaN NaN
或numpy.intersect1d
使用numpy.setdiff1d
:
df = pd.DataFrame({'IN BOTH': pd.Series(np.intersect1d(df.A, df.B)),
'IN COLUMN A': pd.Series(np.setdiff1d(df.A, df.B)),
'IN COLUMN B': pd.Series(np.setdiff1d(df.B, df.A))})
print (df)
IN BOTH IN COLUMN A IN COLUMN B
0 CCC FFF
1 AAA GGG HHH
2 BBB JJJ ZZZ
3 DDD NaN NaN
4 EEE NaN NaN
推荐阅读
- elasticsearch - 如何搜索父文档以及相关子文档的数量
- javascript - 从组件发送 this.state 到 Store 并从另一个组件检索
- asp.net-mvc - 存储过程 ADO.NET .NET Core Web API
- google-sheets - 将带有 2 个值的 Google Combo 图表与折线图相结合
- cereal - 谷物::延迟和 CEREAL_NVP?
- server - 存在反向 DNS (PTR) 问题
- c - 使用结构时出现 C 分段错误
- linux - 这个命令有什么作用?ls /bin | 排序 | 三通 /tmp/lista | wc -l
- optimization - 是全局 MINLP 求解器的结果,全局最优
- php - (PHP)为什么这个生成器脚本将起始值+步值添加到起始值?