首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在pandas中使用iterrows进行迭代时划分行

在pandas中使用iterrows进行迭代时划分行
EN

Stack Overflow用户
提问于 2019-02-27 16:56:25
回答 1查看 445关注 0票数 0

我有一个flask应用程序,在那里我可以获取数据并转换为熊猫数据帧。

代码语言:javascript
运行
复制
if request.method == 'PUT':
   content = request.get_json(silent=True)
   df = pd.DataFrame.from_dict(content)

   for index, row in df.iterrows():

       if row["label"] == True:
          row['A'] = row['B'] / row['C']
       elif row["label"] == False:
          row['A'] = row["B"]
          if row['D'] == 0:
             row['C'] = 0
          else:
             ...

我在这里尝试做的是简单的算术,比如加、减和除。

我之所以使用iterrows(),主要是因为我需要多个值来迭代并对特定行值执行计算。df['..'].item()在我的用例中不起作用。

加法和减法可以很好地工作,但除法似乎不知何故漏掉了,总是返回像0-11这样的值

示例计算

row['A'] = row['B'] / row['C']

大多数情况下,row['B']的值都小于row['C']。示例值

row['A'] = 1232455 / 26719856

该应用程序中涉及的唯一计算是加法,减法和除法。

EN

回答 1

Stack Overflow用户

发布于 2019-02-27 17:47:08

你可以试试这个(下面是一个例子):

代码语言:javascript
运行
复制
import pandas as pd
import numpy as np

data = {'label': [True, False, True, True, False], 
    'A': [2012, 2012, 2013, 2014, 2014], 
    'B': [4, 24, 31, 21, 3],
    'C': [25, 94, 57, 62, 70],
    'D': [3645, 0, 27, 24, 96]}
df = pd.DataFrame(data)

您可以直接在主Dataframe上应用您的更改,而无需每次都迭代每一行,如下所示:

代码语言:javascript
运行
复制
# select only rows with label == True and apply the division function

df.loc[df.label == True, 'A'] = df['B']/df['C']

df.loc[df.label == False, 'A'] = df['B']

df.loc[np.logical_and(df.label == False, df.D == 0), 'C'] = 0 
.
.
.

您可以选择每次要更改的行,并将更改直接应用于其上。就像我一样。

另一点:在我的示例中应用除法之后,整数被转换为float64,您可以在您的示例中尝试使用函数series.astype('flat64')

对于row['A'] = 1232455 / 26719856,您将得到0.046125,而不仅仅是整数部分的0

也许这将使你在做除法运算时不必每次都有零。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54901486

复制
相关文章

相似问题

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