我正在使用df.iterrows或df.itertuples遍历大型数据帧。我正在遵循以下链接中询问的示例:
这是a link
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.rand(10,4),columns=list('ABCD'))
print df
A B C D
0 0.351741 0.186022 0.238705 0.081457
1 0.950817 0.665594 0.671151 0.730102
2 0.727996 0.442725 0.658816 0.003515
3 0.155604 0.567044 0.943466 0.666576
4 0.056922 0.751562 0.135624 0.597252
5 0.577770 0.995546 0.984923 0.123392
6 0.121061 0.490894 0.134702 0.358296
7 0.895856 0.617628 0.722529 0.794110
8 0.611006 0.328815 0.395859 0.507364
9 0.616169 0.527488 0.186614 0.278792
从上面的dataframe中,我尝试引用特定的列和行(例如前一行),但是我得到了错误。例如:
for row in df.iterrows():
if row.loc[1,'A'] > 0.95:
temp_val = row.loc[0,'A']
else:
temp_val = row.loc[0,'B']
谢谢!
发布于 2019-05-13 01:22:33
您可以使用np.where
和DataFrame.shift
更有效地完成此操作
import numpy as np
np.where(df['A'].gt(0.95), df['A'].shift(), df['B'].shift())
代码的问题是df.iterrows()
返回一个tuple
,其中第一个元素是索引,第二个是Series
,所以不能直接对其进行索引。这是一种你可以做到的方法:
df['result'] = np.nan
for ix, row in df.loc[1:,:].iterrows():
if row.loc['A'] > 0.95:
df.loc[ix, 'result'] = df.loc[ix-1,'A']
else:
df.loc[ix, 'result'] = df.loc[ix-1,'B']
https://stackoverflow.com/questions/56101623
复制相似问题