我有一个名称的列表(我们称其为y),大小为(1080,1)。我也有一个大小(700,20)的数据框(我们称其为x),带有包含列表y名称的索引。也就是说,y中没有包含的dataframe名称,但是中没有名称y在数据框中不包含。现在我想做的是插入包含y中尚未在x中的名称的空行。因此,我想在所有列中添加380个新行,所有列中的空值和索引值等于y的值数据框中尚未包含。
何处:
import pandas as pd
import numpy as np
df1 = pd.DataFrame({"name":["Marc", "Eric", "Bob"], "x":np.arange(3)})
Y = ["Marc", "Eric", "Bob","Carl"]
df2 = pd.DataFrame({"name":Y})
df = pd.concat([df1, df2[~df2["name"].isin(df1["name"])]])
更新我稍作修改了我的示例以适合您的情况(除了前4个字符,而不是10个字符)
import pandas as pd
import numpy as np
df1 = pd.DataFrame({"name":["Marc Green", "Eric White", "Carl Red"], "x":np.arange(3)})
Y = ["Marc", "Eric", "Anna","Carl"]
df2 = pd.DataFrame({"name":Y})
df = pd.concat([df1, df2[~df2["name"].isin(df1["name"].str[:4])]])
更新2 看来,在您的情况下,dataframe X
中的名称是-
分开的,因此您可以使用此解决方案
df1 = pd.DataFrame({"name":["Marc - Green", "Eric - White", "Carl - Red"], "x":np.arange(3)})
Y = ["Marc", "Eric", "Anna","Carl"]
df2 = pd.DataFrame({"name":Y})
df = pd.concat([df1, df2[~df2["name"].isin(df1["name"].str.split("-").apply(lambda x:x[0].strip()))]])
note 正如其他人已经评论的那样,如果您提出问题更好,如果您提供了 text 格式的数据示例,以便其他人可以轻松提供帮助。<<<<<<<<<<<<<<<<<<<<