我有一个系列,我分为两部分,因为部分包含需要不同处理的条款。之后,我想按照最初的顺序合并两个拆分的序列(实际上,在处理之后,它们现在是两列数据帧)。我几乎解决了这个问题:
import pandas as pd
terms = pd.Series(["oo1", "oo2", "oo3", "aa1", "aa2", "oo4"], name="term")
# 0 oo1
# 1 oo2
# 2 oo3
# 3 aa1
# 4 aa2
# 5 oo4
terms_oo = terms[terms.apply(lambda term: "oo" in term)]
# 0 oo1
# 1 oo2
# 2 oo3
# 5 oo4
terms_aa = terms[terms.apply(lambda term: "aa" in term)]
# 3 aa1
# 4 aa2
# process differently so you end up with
df_aa = pd.concat([terms_aa, pd.Series(["taa1", "taa2"], index=[3, 4])], axis=1)
df_aa.columns = ["term", "annotations"]
# term annotations
# 3 aa1 taa1
# 4 aa2 taa2
df_oo = pd.concat([terms_oo, pd.Series(["too1", "too2", "too3", "too4"], index=[0, 1, 2, 5])], axis=1)
df_oo.columns = ["term", "annotations"]
# term annotations
# 0 oo1 too1
# 1 oo2 too2
# 2 oo3 too3
# 5 oo4 too4
现在我想把df_aa
和df_oo
组合起来,这样它们就有了terms
中的原始顺序,因此annotations
是一列,其中包括来自df_aa
和df_oo
的值。我该怎么做?你知道吗
我尝试了以下步骤,但找不到所需的最后一步:
terms_df = pd.DataFrame(terms)
m1 = terms_df.merge(df_aa, on="term", how="outer")
m2 = m1.merge(df_oo, on="term", how="outer")
# term annotations_x annotations_y
# 0 oo1 NaN too1
# 1 oo2 NaN too2
# 2 oo3 NaN too3
# 3 aa1 taa1 NaN
# 4 aa2 taa2 NaN
# 5 oo4 NaN too4
上面我想把annotations列合并成一个。它们应该是互斥的(一个中的nan在另一个中有一个值)。你知道吗
以下是我尝试过的:
m2["annotations"] = m2[pd.isnull(m2["annotations_x"])]["annotations_y"]
m2
# term annotations_x annotations_y annotations
# 0 oo1 NaN too1 too1
# 1 oo2 NaN too2 too2
# 2 oo3 NaN too3 too3
# 3 aa1 taa1 NaN NaN
# 4 aa2 taa2 NaN NaN
# 5 oo4 NaN too4 too4
m2["annotations"] = m2[pd.isnull(m2["annotations_y"])]["annotations_x"]
m2
# term annotations_x annotations_y annotations
# 0 oo1 NaN too1 NaN
# 1 oo2 NaN too2 NaN
# 2 oo3 NaN too3 NaN
# 3 aa1 taa1 NaN taa1
# 4 aa2 taa2 NaN taa2
# 5 oo4 NaN too4 NaN
我把这整件事都包括进去,因为我最初想做的事情可能只需要几行字就可以完成。所以我没有仅仅展示我的最后一个问题,而是包括了整个问题,因为如果我更聪明的话,我现在正在努力解决的最后一个问题可能是可以避免的。你知道吗
使用
append()
和sort()
这里没有必要做任何复杂的事情。索引是保留的,因此您可以简单地附加它们并对它们进行排序
相关问题 更多 >
编程相关推荐