Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于列表在dataframe中插入命名行_Python_Pandas - Fatal编程技术网

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

Python 基于列表在dataframe中插入命名行,python,pandas,Python,Pandas,我有一个名字列表(我们称之为Y),它的大小是(1080,1)。我还有一个大小为(700,20)(我们称之为X)的数据框,索引中包含列表Y中的名称。也就是说,数据框中没有不包含在Y中的名称,但Y中有不包含在数据框中的名称。现在,我想做的是插入包含Y中的名称的空行,这些名称在X中还没有。因此,我想添加380个新行,所有列中都有空值,索引值等于数据框中还没有包含的Y值。这是怎么回事: import pandas as pd import numpy as np df1 = pd.DataFrame({

我有一个名字列表(我们称之为Y),它的大小是(1080,1)。我还有一个大小为(700,20)(我们称之为X)的数据框,索引中包含列表Y中的名称。也就是说,数据框中没有不包含在Y中的名称,但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个字符)

更新2 在您的示例中,数据框
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()))]])
注意正如其他人已经评论过的那样,当你提出问题时,最好以文本格式提供一个数据示例,以便其他人能够方便地提供帮助。

这是怎么回事:

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个字符)

更新2 在您的示例中,数据框
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()))]])

注意正如其他人已经评论过的那样,当你提问时,最好以文本格式提供一个数据示例,以便其他人可以方便地提供帮助。

示例X,Y会很有帮助。也许您正在查看
reindex
我们需要样本数据。添加
打印(X.head())
样本X,Y会很有帮助。也许你正在寻找
reindex
我们需要样本数据。添加
打印(X.head())
我想你应该接受答案。你必须为你的特殊问题而努力,但提供的解决方案解决了一般情况。我想你应该接受答案。你必须为你的特殊问题而努力,但提供的解决方案解决了一般情况。