Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.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 如果行值是串联的,则使用数据框创建带有标签(0或1)的新列_Python_Pandas - Fatal编程技术网

Python 如果行值是串联的,则使用数据框创建带有标签(0或1)的新列

Python 如果行值是串联的,则使用数据框创建带有标签(0或1)的新列,python,pandas,Python,Pandas,我对python和pandas很陌生,我有一个小问题。我试图在论坛和谷歌上找到解决方案,但没有找到。现在我们开始: 我有一个包含唯一名称的系列: in [8]: Name_Series.head() Out[8]: 0 US2005642 1 US2007961 2 US13721 3 US2013770 4 US14822 dtype: object 在我的数据框中,有一列每行包含一个名称 In [5]: df.Name.head() Out

我对python和pandas很陌生,我有一个小问题。我试图在论坛和谷歌上找到解决方案,但没有找到。现在我们开始:

我有一个包含唯一名称的系列:

in [8]: Name_Series.head()
Out[8]: 
0     US2005642
1     US2007961
2       US13721
3     US2013770
4       US14822
dtype: object
在我的数据框中,有一列每行包含一个名称

In [5]: df.Name.head()
Out[5]: 
0    JP2015121
1      US14822
2      US14358
3    JP2015539
4    JP2015156
Name: AppNo, dtype: object
我需要的是一个新的列“Label”,如果Name_系列中包含名称,它将包含一个1,如果不包含名称,它将包含一个0

我的想法是编写一个返回1或0的函数,并将其应用于数据帧:

def Label(Name_Series, Name):
if Name_Series.str.contains(Name).sum()>0:
    return 1            
else:
    return 0
df['Prio'] = list(map(Label_Prio, PrioList, df.AppNo))
不幸的是,这会导致以下错误:

IN [9]: df['Label'] = list(map(Label, Name_Series, df.Name))
Traceback (most recent call last):

  File "<ipython-input-9-713d2d55d303>", line 1, in <module>
    df['Label'] = list(map(Label, Name_Series, df.Name))

  File "Test.py", line 60, in Label
    if Name_Series.str.contains(Name).sum()>0:

AttributeError: 'unicode' object has no attribute 'str'
[9]中的
:df['Label']=列表(映射(Label,Name_Series,df.Name))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
df['Label']=列表(地图(标签、名称系列、df.Name))
文件“Test.py”,第60行,在标签中
如果Name_Series.str.contains(Name).sum()>0:
AttributeError:“unicode”对象没有属性“str”
所以当我使用map函数时,它只从序列中取一个值,而不是取整个序列。我是否可以告诉map函数将序列作为一个整体作为参数,而不是序列中的一个值

如果有人提出另一个解决方案,导致同样的结果,我将不胜感激。我的第一次尝试是编写一个循环,它遍历每一行并返回1或0,但速度非常慢。将应用数据帧的数据帧有200k+行,要搜索的序列将包括约20k个名称

试试这个:

df['Prio'] = 0
df['Prio'] = df[df['Name'].isin(Name_Series)] = 1

您只需使用
isin
。将布尔结果乘以1将其转换为0和1:您也可以使用
.astype(int)


谢谢你的帮助。通过将“=”替换为“*”,就像Alexander建议的那样,我可以解决这个问题!比编写函数更简单!当然可以。而且速度相当快。这就是我开始使用python和pandas的基本原因,已经实现了很多函数。我想等我有更多时间的时候,我会仔细看看熊猫的文档。再次感谢您快速、准确的回答!
df['Label'] = df.Name.isin(Name_Series) * 1

>>> df
        Name  Label
0  JP2015121      0
1    US14822      1
2    US14358      0
3  JP2015539      0
4  JP2015156      0