我有一个熊猫数据帧,看起来像这样(它非常大)

           date      exer exp     ifor         mat  
1092  2014-03-17  American   M  528.205  2014-04-19 
1093  2014-03-17  American   M  528.205  2014-04-19 
1094  2014-03-17  American   M  528.205  2014-04-19 
1095  2014-03-17  American   M  528.205  2014-04-19    
1096  2014-03-17  American   M  528.205  2014-05-17 

现在我想逐行迭代,当我遍历每一行时,ifor的值 在每一行可以改变取决于某些条件,我需要查找另一个数据框架。

现在,我如何在迭代时更新它。 试过几招,都没用。

for i, row in df.iterrows():
    if <something>:
        row['ifor'] = x
    else:
        row['ifor'] = y

    df.ix[i]['ifor'] = x

这些方法似乎都不起作用。我没有在数据框架中看到更新的值。


当前回答

好吧,如果你无论如何都要迭代,为什么不使用最简单的方法df['Column'].values[i]

df['Column'] = ''

for i in range(len(df)):
    df['Column'].values[i] = something/update/new_value

或者如果你想比较新值和旧值或者类似的东西,为什么不把它存储在一个列表中,然后在最后追加。

mylist, df['Column'] = [], ''

for <condition>:
    mylist.append(something/update/new_value)

df['Column'] = mylist

其他回答

for i, row in df.iterrows():
    if <something>:
        df.at[i, 'ifor'] = x
    else:
        df.at[i, 'ifor'] = y

你应该用df来赋值。ix[i, 'exp']=X或df。loc[i, 'exp']=X而不是df。Ix [i]['ifor'] = x。

否则,你正在处理一个视图,并且应该得到一个温暖:

-c:1: SettingWithCopyWarning:一个值正在试图从一个DataFrame的切片副本上设置。 尝试使用.loc[row_index,col_indexer] = value代替

但可以肯定的是,循环应该被一些矢量化算法所取代,以充分利用@Phillip Cloud所建议的DataFrame。

好吧,如果你无论如何都要迭代,为什么不使用最简单的方法df['Column'].values[i]

df['Column'] = ''

for i in range(len(df)):
    df['Column'].values[i] = something/update/new_value

或者如果你想比较新值和旧值或者类似的东西,为什么不把它存储在一个列表中,然后在最后追加。

mylist, df['Column'] = [], ''

for <condition>:
    mylist.append(something/update/new_value)

df['Column'] = mylist

列表理解可以是一个选项。

df['new_column'] = [your_func(x) for x in df['column']]

这将遍历列df['column'],使用来自df['column']的值调用函数your_func,并为新列df['new_column']中的行赋值。

请不要忘记创建一个函数。

从列中增加MAX数。例如:

df1 = [sort_ID, Column1,Column2]
print(df1)

我的输出:

Sort_ID Column1 Column2
12         a    e
45         b    f
65         c    g
78         d    h

MAX = df1['Sort_ID'].max() #This returns my Max Number 

现在,我需要在df2中创建一个列,并填充使MAX增加的列值。

Sort_ID Column1 Column2
79      a1       e1
80      b1       f1
81      c1       g1
82      d1       h1

注意:df2最初只包含columnn1和Column2。我们需要创建Sortid列,并从df1增加MAX。