我有一个熊猫数据帧,看起来像这样(它非常大)
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
这些方法似乎都不起作用。我没有在数据框架中看到更新的值。
你可以使用的一个方法是itertuples(),它迭代DataFrame行作为命名元组,索引值作为元组的第一个元素。与iterrows()相比,它要快得多。对于itertuples(),每行在DataFrame中包含它的Index,您可以使用loc来设置该值。
for row in df.itertuples():
if <something>:
df.at[row.Index, 'ifor'] = x
else:
df.at[row.Index, 'ifor'] = x
df.loc[row.Index, 'ifor'] = x
在大多数情况下,itertuples()比iat或at快。
谢谢@SantiStSupery,使用。at比loc快得多。
好吧,如果你无论如何都要迭代,为什么不使用最简单的方法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
从列中增加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。