python - 比较熊猫数据框中的两个字符串并显示差异
问题描述
例如对于牵引柱
target read
AATGGCATC AATGGCATG
AATGATATA AAGGATATA
AATGATGTA CATGATGTA
我想添加列
target read differnces
AATGGCATC AATGGCATG (C,G,8)
AATGATATA AAGGATATA (T,G,3)
AATGATGTA CATGATGTA (A,G,0)
解决方案
让我们拆分每个单词(同时删除初始空格)并创建一个堆叠的数据帧,在那里我们可以使用累积计数来计算每个出现的次数并删除所有重复项,同时最终创建我们的元组。
这里的关键函数是explode
, str_split
,stack
和drop_duplicates
s = (
df.stack()
.str.split("")
.explode()
.to_frame("words")
.replace("", np.nan, regex=True)
.dropna()
)
s['enum'] = s.groupby(level=[0,1]).cumcount()
df["diff"] = (
s.reset_index(0)[
~s.reset_index(0).duplicated(subset=["level_0", "words", "enum"], keep=False)
]
.groupby("level_0")
.agg(words=("words", ",".join), pos=("enum", "first"))
.agg(tuple, axis=1)
)
print(df)
target read diff
0 AATGGCATC AATGGCATG (C,G, 8)
1 AATGATATA AAGGATATA (T,G, 2)
2 AATGATGTA CATGATGTA (A,C, 0)
print(s.reset_index(0)[
~s.reset_index(0).duplicated(subset=["level_0", "words", "enum"], keep=False)])
level_0 words enum
target 0 C 8
read 0 G 8
target 1 T 2
read 1 G 2
target 2 A 0
read 2 C 0
推荐阅读
- javascript - React Native - 路由“...”的组件必须是 React 组件
- c# - C# - 无法连接我的套接字服务器
- swift - 为什么将 IB Action 设置为作为对象退出?
- excel - 勾选复选框 IE 自动化 Excel VBA
- java - Gradle 在运行任务上设置了不正确(意外?)的类路径
- android - 如何从 Unity iOS 构建中排除 Firebase 消息传递,而不是 Android 构建
- python - Python:动态实例化
- c# - Raspberry (C#) 在使用 IP 时连接到 MySQL,但在使用服务器名称时失败
- kiosk-mode - Chrome 商店中的自助服务终端应用程序不再工作
- php - Htmlspecialchars ENT_NOQUOTES 不起作用?