组内具有排除条件的pandas groupby

2024-04-20 02:32:35 发布

您现在位置:Python中文网/ 问答频道 /正文

输入数据帧-->&燃气轮机

enter image description here

输出-->&燃气轮机

enter image description here

这就是我想计算总数的方法。 A列和B列中的值可能不同

enter image description here

我想以这样的方式聚合这个数据帧,对于列A的公共值,我必须忽略当前的唯一值,但是必须考虑B的所有值,并且必须取列C相对于先前条件的和。p>

比如说-- 1--对于A=A和B=1,我必须忽略B=1的列C的值,但我必须添加列C的值,其中列A==A和B的值=1,总和应为5(2+3)

<p>2——对于A组=A和B=2,我必须忽略B=2,但必须考虑A= A和B=!2所以对于A=A和B=2总和为4(1+3)

<P>3 ---对于A组=A,B=3,我必须忽略B=3,但必须考虑A= A和B=!3所以对于A=A和B=3之和为3(1+2)

我得把这个东西换成一百万a,一个a可以有任意数量的B值

一切都应该是动态的

谢谢:)


Tags: 数据方法gt数量方式动态条件总数
3条回答

您可以对数据帧行进行简单的迭代:

# get rows except the current show
ss['sum'] = [ss.iloc[ss.index.difference([x]),1].sum() for x in range(ss.shape[0])]

print(ss)

   A  B  sum
0  a  1    5
1  a  2    4
2  a  3    3

样本数据

ss = pd.DataFrame({'A': list('aaa'), 'B': [1,2,3]})

你可以试试看

首先,我将基于列A的数据分组到一个新的数据帧dfsum中

然后我将C列转换为和。然后从原始列C中减去总和,得到所需的值

import pandas as pd
df = pd.DataFrame({'A': list('aaabbb'), 'B': [1,2,3,1,2,3], 'C': [1,2,3,4,5,6]})

dfsum = df.groupby(['A'])

n = dfsum['C'].transform('sum')

df['sum'] = (n - df['C'])

print (df)

结果如下:

   A  B  C  sum
0  a  1  1    5
1  a  2  2    4
2  a  3  3    3
3  b  1  4   11
4  b  2  5   10
5  b  3  6    9

我只是有一个类似的问题。也许你现在已经解决了,但这就是我所做的。 我会使用一个函数来计算你描述的这个特殊的和

def exclusion_sum(row, df):
    exclusion_mask = (df['A'] == row['A']) & (df['B'] != row['B'])
    return df[exclusion_mask]['C'].sum() + row['B']

df['sum'] = df.apply(lambda x: exclusion_sum(x, df), axis=1)

相关问题 更多 >