例如 对于两列
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
关于python - 比较 pandas 数据框中的两个字符串并显示差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62532301/