python - Pandas - 在两列中查找具有匹配值的行并在另一列中乘以值

标签 python pandas loops

首先假设我们有一个数据框如下:

import pandas as pd
data = pd.DataFrame({'id':['1','2','3','4','5','6','7','8'], 
                     'A':['foo', 'bar', 'foo', 'bar','foo', 'bar', 'foo', 'foo'],  
                     'C':['10','10','10','30','50','60','50','8'], 
                     'D':['9','8','7','6','5','4','3','2']})
print(data)

    A   C   D   id
0   foo 10  9   1
1   bar 10  8   2
2   foo 10  7   3
3   bar 30  6   4
4   foo 50  5   5
5   bar 60  4   6
6   foo 50  3   7
7   foo 8   2   8

我想做的是找到匹配行,然后进行一些计算。

for any two ids(idx, idy) in data.iterrows():
       if idx.A == idy.A and idx.C = idy.C:
       result = idx.D * idy.D

然后生成一个包含三列的新数据框 ['id']['A']['result'] .

所以几行预期结果是:

     id   A   result   
0    1   foo   63   
1    3   foo   63   
2    5   foo   15
3    7   foo   15

我已经尝试过,但结果要么是错误的逻辑,要么是错误的代码/数据格式。 有人可以帮我一下吗?

最佳答案

一种方法是按A + C分组,取产品并计数,过滤掉组中只有单个项目的那些,然后在A + C上内部合并回您的原始框架,例如:

df.merge(
    df.groupby(['A', 'C']).D.agg(['prod', 'count'])
    [lambda r: r['count'] > 1],
    left_on=['A', 'C'],
    right_index=True
)

给你:

     A   C  D  id  prod  count
0  foo  10  9   1    63      2
2  foo  10  7   3    63      2
4  foo  50  5   5    15      2
6  foo  50  3   7    15      2

然后根据需要删除/重命名列。

关于python - Pandas - 在两列中查找具有匹配值的行并在另一列中乘以值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51808294/

相关文章:

python - 使用 asyncio 处理超时

python - 在 Pandas Dataframe 中生成另一列的某些子集的最小值的新列的有效方法

python - 一定次数的迭代后打开一个新的 CSV 文件

python - 以数字方式重新排序 df.columns alpha

java - 为什么我的 Java "for"循环立即结束?

java - 打印字符串中的字符(第一个字符;然后是第一个和第二个;然后是第一个、第二个和第三个)

python - 如何使用参数检索挂起和正在执行的 Celery 任务?

android - 如何输入命令到CTS-Tradefed?

python - VTK 不能用 vtkClipClosedSurface 构造一个合适的闭合曲面

javascript - 检查输入时数组项丢失值