基于列表在dataframe中插入命名行

2024-04-20 00:44:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名单(让我们称之为Y)的名字,它的大小是(1080,1)。我还有一个大小为(700,20)的dataframe(我们称之为X),索引包含列表Y中的名称。也就是说,dataframe中没有不包含在Y中的名称,但是Y中有不包含在dataframe中的名称。现在我要做的是插入包含Y中的名称的空行,而这些名称还没有包含在X中。因此,我要添加380个新行,所有列中都有空值,索引值等于数据帧中还没有包含的Y的值。你知道吗


Tags: 数据名称dataframe列表名字空值名单空行
1条回答
网友
1楼 · 发布于 2024-04-20 00:44:37

这个呢:

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()))]])

注意正如其他人已经评论过的那样,如果您以文本格式提供您的数据示例,那么当您提出问题时,最好让其他人能够轻松地提供帮助。你知道吗

相关问题 更多 >