【问题标题】:iterate to perform calculations on certain column in pandas dataframe迭代以对熊猫数据框中的某些列执行计算
【发布时间】:2020-06-12 19:32:35
【问题描述】:

我正在使用一个大型 pandas 数据框,并在其中创建了一个新的空列。我想要做的是迭代数据框特定列中的每个值,进行布尔检查,然后根据值检查的输出为新列分配一个值。

我认为我需要使用 for 循环来检查指定列中每个单元格的各个内容。问题是我似乎无法找出正确的语法来正确编写检查特定列中值的 for 循环。这是我目前所拥有的。


call_info['% of Net Capital'] = call_info['Call Amount'] / call_info['Net Capital']

for (ColumnData) in call_info['Call Amount']:
    columnSeriesObj = call_info[ColumnData]
    if columnSeriesObj.any - call_info['Excess Deficit'].any > 0:
       call_info['Sufficient Excess?'][ColumnData] = True
    else:
        call_info['Sufficient Excess?'][ColumnData] = False

我得到一个 KeyError:38749372

call_info 是一个熊猫数据框。我正在尝试将 call_info['Call Amount'] 与 call_info['Excess Deficit'] 进行比较,并在 call_info['Sufficient Excess?'] 中输入 True 或 false 值

**已更新以包含我的数据框示例和预期输出

这是一个较大的 csv 文件的片段:

我已经使用 openpyxl load_workbook 从这个 CSV 文件中加载了数据 从那里,我使用以下代码将数据转换为 Pandas 数据框:

from itertools import islice
data = sheet_ranges.values
cols = next(data)[1:]
data = list(data)
idx = [r[0] for r in data]
data = (islice(r, 1, None) for r in data)
df = pd.DataFrame(data, index=idx, columns=cols)

预期输出的一个示例是数据框中的列,如下所示:

我已经能够在 Excel 中执行此操作,但我希望自动化该过程

【问题讨论】:

  • 你能提供一个你的数据框的例子吗?以及预期的结果
  • 为了清楚起见,我刚刚更新了。谢谢你的建议

标签: python-3.x pandas loops dataframe iteration


【解决方案1】:

我做了一些演示数据,希望能代表问题。

import numpy as np
import pandas as pd

np.random.seed(0)

df = pd.DataFrame(np.random.randint(1000, size = [20, 2]), columns = ['call_amount', 'excess_deficit'])

然后你可以使用下面的代码来得到你想要的结果。

df['sufficient_excess'] = (df['call_amount'] - df['excess_deficit']) > 0

给了

    call_amount excess_deficit  sufficient_excess
0           684            559               True
1           629            192               True
2           835            763               True
3           707            359               True
4             9            723              False
5           277            754              False
6           804            599               True
7            70            472              False
8           600            396               True
9           314            705              False

如果您需要将结果更改为 Yes 而不是 True,现在让我来

【讨论】:

  • 啊哈!我没有意识到您可以像这样简单地将整个列相互比较。谢谢
  • 是的,pandas 非常适合解决这类问题 :)
猜你喜欢
  • 1970-01-01
  • 2015-06-24
  • 2015-01-28
  • 1970-01-01
  • 2020-05-17
  • 2015-12-09
  • 2020-07-30
  • 1970-01-01
  • 2015-03-28
相关资源
最近更新 更多