python - 比较 pandas 数据框中的两个字符串并显示差异

标签 python pandas

例如 对于两列

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)

最佳答案

让我们拆分每个单词(同时删除初始空格)并创建一个堆叠数据帧,我们可以使用累积计数来计算每个单词的出现次数,并在最终创建元组时删除所有重复项。

这里的关键函数是explodestr_splitstackdrop_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/

相关文章:

Python伪逆和向量的行列式

python - Pandas 可以在 Google App Engine for Python 上运行吗?

python - Spark窗口函数,根据数据集中的值创建排名列

python - 如何从 View 类测试 Django 重定向

python - 使用 Python 将 CSV 元素从列合并到行

python - 计算 Pandas 时间序列上的每日事件

python - 如何根据第一次出现的唯一列值获取行

python - 在Thread中使用asyncio的问题

python - 将for循环的输出写入python中的csv

python - 如果 pandas 系列中的字符串包含来自另一个 pandas 数据帧的字符串