Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.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 从中的每一行创建一个新列_Python_Pandas_Dataframe - Fatal编程技术网

Python 从中的每一行创建一个新列

Python 从中的每一行创建一个新列,python,pandas,dataframe,Python,Pandas,Dataframe,我试图创建一个新列,并使用每行中的值填充它。我有一个专栏“旅程”,新的专栏是“起源” def getOrigin(journey): if " to " in journey: return journey.split(" to ")[0] else: return "No origin" df['Origin'] = getOrigin(df.Journey) print(df['Origin']) 如果df.travel是“从美国到英国”

我试图创建一个新列,并使用每行中的值填充它。我有一个专栏“旅程”,新的专栏是“起源”

def getOrigin(journey):
    if " to " in journey:
        return journey.split(" to ")[0]
    else:
        return "No origin"

df['Origin'] = getOrigin(df.Journey)

print(df['Origin'])
如果df.travel是“从美国到英国”,那么我希望df['Origin']是“America”,但是每一行的Origin都是“No Origin”。我该怎么做?

str.extract
+
fillna

str.split
+
fillna

列表理解
我相信您需要这样绘制地图:

df['Origin'] = df.Journey.applymap(getOrigin)

这应该将您的函数应用于旅程列中的每个项目

此解决方案效率较低,代码较多,但作为初学者,可能更容易理解。。。 与你试图解决问题的方式一致

df = pd.DataFrame(data = {'Journey' : ['england to america', 'peru', 'france to china']})

origin = []
def getOrigin(Journey):
    for i in range(len(Journey)):
        if " to " in Journey[i]:
            origin.append(Journey[i].split(" to ")[0])
        else:
            origin.append("No origin")
return origin



df['Origin'] = getOrigin(df['Journey'])

print (df['Origin'])

0      england
1    No origin
2       france
Name: Origin, dtype: object

您可以使用非循环解决方案100%矢量化。。。虽然这是一个备选方案,但在开始讨论这个问题之前,我还是推荐另外5个更相关的方案。
df['Origin'] = [
    x.split(' to ')[0] if 'to' in x else 'No origin' for x in df['Journey']
]
df['Origin'] = df.Journey.applymap(getOrigin)
df = pd.DataFrame(data = {'Journey' : ['england to america', 'peru', 'france to china']})

origin = []
def getOrigin(Journey):
    for i in range(len(Journey)):
        if " to " in Journey[i]:
            origin.append(Journey[i].split(" to ")[0])
        else:
            origin.append("No origin")
return origin



df['Origin'] = getOrigin(df['Journey'])

print (df['Origin'])

0      england
1    No origin
2       france
Name: Origin, dtype: object