与Pandas的聚集和分组

2024-05-15 00:08:37 发布

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

我正在尝试添加一列基于帐号的值,并在新列中显示结果。另外,我将合同帐户的第一个实例标识为唯一值,其他实例标识为副本。 例如:

Index   CA#   Duplicate?    $     $$
1      1101   True        440.4  880.80 
2      1101   False       440.4  -   
3      1102   True        440.8  440.80 
4      1103   True        441.2  441.20 
5      1106   True        442.4  1,327.20 
6      1106   False       442.4  -   
7      1106   False       442.4  -   

我的第一列'CA#'是标识符,如果它们是第一列也是唯一的CA#,我想将它们标记为True(or 1),否则,我想将它们标记为False(or 0)。 例如,CA# 1101 on Index 1将接收TrueCA# 1101 on Index 2将接收False。你知道吗

然后我尝试使用这个True标志来求每个CA#链接到$列的总数。在CA#1101的情况下,总的$$880.80。 到目前为止,我只尝试生成一个新列,该列具有CA列上唯一值的布尔标识符,但我只得到代码创建的新序列的真值,我知道这是错误的。你知道吗

import pandas as pd
from pandas import DataFrame, Series
import numpy as np

file_name= ('A:\LEO\Documents\Mock data.xlsx')
sheet_name= ('Sheet1')
data = pd.read_excel(io= file_name, sheet= sheet_name)
data.sort_values('CA#', inplace= True)
data_ltd = DataFrame(data, columns=['CA#','$'])
bool_series = data_ltd['CA'].duplicated()
data_ltd ['bool_series'] = bool_series
print(data_ltd[bool_series].head(10))

Tags: 实例name标记importfalsetruedataindex
3条回答

这应该可以实现Duplicated列的技巧:

df = pd.DataFrame({'CA#': [1101, 1101, 1102,1103, 1106, 1106, 1106]})
seen = set()
def already(x):
    global seen
    if x in seen:
        return False
    else:
        seen.add(x)
        return True

df['Duplicate'] = df['CA#'].apply(already)
df
#     CA#  Duplicate
# 0  1101       True
# 1  1101      False
# 2  1102       True
# 3  1103       True
# 4  1106       True
# 5  1106      False
# 6  1106      False

使用^{}的倒数:

~df.duplicated('CA#')

0     True
1    False
2     True
3     True
4     True
5    False
6    False
dtype: bool
df['Duplicate?'] = ~df.duplicated('CA#')

    CA#  Duplicate?      $        $$
0  1101        True  440.4    880.80
1  1101       False  440.4         -
2  1102        True  440.8    440.80
3  1103        True  441.2    441.20
4  1106        True  442.4  1,327.20
5  1106       False  442.4         -
6  1106       False  442.4         -

要获取$$列,我们可以使用^{}^{}

df['$$'] = df.groupby('CA#')['$'].transform('sum')
df['$$'] = np.where(df['$$'].duplicated(), '-', df['$$'])

    CA#  Duplicate?      $                  $$
0  1101        True  440.4               880.8
1  1101       False  440.4                   -
2  1102        True  440.8               440.8
3  1103        True  441.2               441.2
4  1106        True  442.4  1327.1999999999998
5  1106       False  442.4                   -
6  1106       False  442.4                   -

更新:命令序列会改变结果!这个序列对我有用:

#Start with sorting the values    
data_fr.sort_values(by='CA',ascending= True, inplace= True) 
#Identify duplicates    
data_fr['Unique Px']= ~data_fr.duplicated('CA') 
#Group and aggregate in a new column
data_fr['$$'] = data_fr.groupby('CA')['$'].transform('sum') 

相关问题 更多 >

    热门问题