为数据框中的每一行运行函数

时间:2019-07-20 03:06:12

标签: python python-3.x pandas dataframe

我有一个数据框df1,如下所示:

date        sentence
29/03/1029  I like you
30/03/2019  You eat cake

并运行功能getVerbgetObj到数据帧df1。因此,输出如下所示:

date        sentence      verb   object
29/03/1029  I like you    like   you
30/03/2019  You eat cake  eat    cake

我希望为getVerb中的每一行运行那些功能(getObjdf1)。有人可以帮助我有效地解决这个问题吗?

非常感谢您。

3 个答案:

答案 0 :(得分:2)

熊猫DataFrame的每一列都是Series。您可以使用Series.applySeries.map函数来获得所需的结果。

df1['verb'] = df1['sentence'].apply(getVerb)
df1['object'] = df1['sentence'].apply(getObj)

# OR

df1['verb'] = df1['sentence'].map(getVerb)
df1['object'] = df1['sentence'].map(getObj)

有关Series.applySeries.map的更多详细信息,请参见熊猫文档。

答案 1 :(得分:2)

假设您有一个熊猫数据框,例如:

import pandas as pd, numpy as np

df = pd.DataFrame([[4,9]] * 3,列= ['A','B'])

>>>df
   A  B
   4  9
   4  9         
   4  9

比方说,我们希望A和B列的和分别为行和列。为此,我们编写

df.apply(np.sum, axis = 1) # for row-wise sum
Output: 13 
        13
        13
df.apply(np.sum, axis = 0) # for column-wise sum
Output: A 12
        B 27

现在,如果要对一组特定的列应用任何功能,则可以从数据框中选择一个子集。

例如:我只想计算A列上的总和。

df['A'].apply(np.sum, axis =1)

Dataframe.apply

您也可以参考上面的链接。除此之外,如上述答案中所述,Series.map,Series.apply也可以派上用场。 干杯!

答案 2 :(得分:1)

使用一个简单的循环:(假设数据框中已经存在名称为“动词”和“对象”的列)

for index, row in df1.iterrows():
    df1['verb'].iloc[index]= getVerb(row['sentence'])
    df1['object'].iloc[index]= getObj(row['sentence'])