首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在迭代数据帧时引用行和列

如何在迭代数据帧时引用行和列
EN

Stack Overflow用户
提问于 2019-05-13 01:16:35
回答 1查看 1.3K关注 0票数 1

我正在使用df.iterrows或df.itertuples遍历大型数据帧。我正在遵循以下链接中询问的示例:

这是a link

代码语言:javascript
复制
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中,我尝试引用特定的列和行(例如前一行),但是我得到了错误。例如:

代码语言:javascript
复制
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']

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-13 01:22:33

您可以使用np.whereDataFrame.shift更有效地完成此操作

代码语言:javascript
复制
import numpy as np
np.where(df['A'].gt(0.95), df['A'].shift(), df['B'].shift())

代码的问题是df.iterrows()返回一个tuple,其中第一个元素是索引,第二个是Series,所以不能直接对其进行索引。这是一种你可以做到的方法:

代码语言:javascript
复制
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']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56101623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档