我正在尝试根据帐号添加一列值,并将结果显示在新列中。另外,我将合同帐户的第一个实例标识为“唯一值”,将其他实例标识为重复项。 例如:
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#'
是要标记为True(or 1)
的标识符,如果它们是第一个也是唯一的CA#
,否则,我希望将它们标记为False(or 0)
。
例如,CA# 1101 on Index 1
将收到True
,而CA# 1101 on Index 2
将收到False
。
然后,我尝试使用True标志对CA#
列上每个$
所链接的总数进行求和。在CA#1101
情况下,总$$
为880.80
。
到目前为止,我只能尝试生成一个新列,该新列具有CA#列上唯一值的布尔标识符,但是我在我的代码创建的新系列中仅得到True值,我知道这是错误的。
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))
答案 0 :(得分:1)
这应该可以解决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
答案 1 :(得分:1)
使用duplicated
的倒数:
~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 -
要获取您的$$
列,我们可以使用groupby
和np.where
:
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 -
答案 2 :(得分:0)
data_fr.sort_values(by ='CA',ascending = True,inplace = True)#开始对值进行排序 data_fr ['Unique Px'] =〜data_fr.duplicated('CA')#识别重复项 data_fr ['$$'] = data_fr.groupby('CA')['$']。transform('sum')#在新列中分组并聚合