我有一个dataframe
,其中有许多客户条目。这些具有不同客户编号的客户属于某些客户组(合同,批发商,投标人等)。我必须将每个客户组的dataframe
的某些值加到Series
中(例如,合同客户的总销售额将是Series
中的一个条目)。>
我尝试使用.isin()
,但是遇到属性错误(float object has no attribute 'isin'
)。如果我与or
运算符一起工作,则可以正常工作,但随后我将必须手动输入所有客户组的所有客户编号。我敢肯定,必须有一种非常简单有效的方法。预先非常感谢。
for i in range(len(grouped_sales)):
if df.iloc[i,1]==value1 or df.iloc[i,1]==value2 or df.iloc[i,1]==...:
series[1]=series[1]+df.iloc[i,3]
elif df.iloc[1,i]==valueN or df.iloc[i,1]==value(N+1)...:
series[2]=series[2]+df.iloc[1,3]
elif:
...
答案 0 :(得分:0)
如果您想汇总每个组的销售额,您可能需要研究熊猫的
df.groupby()
也许
我正在尝试重现您想要的样子
>>> df = pd.DataFrame()
>>> df['cust_numb']=[1,2,3,4,5]
>>> df['group']=['group1','group2','group3','group3','group1']
>>> df['sales']=[50,30,50,40,20]
>>> df
cust_numb group sales
0 1 group1 50
1 2 group2 30
2 3 group3 50
3 4 group3 40
4 5 group1 20
>>> df.groupby('group').sum()['sales']
group
group1 70
group2 30
group3 90
Name: sales, dtype: int64
您将拥有一个以组为索引,销售总额为值的系列
编辑:根据您的评论,您将组数据存储在单独的词典中,实现方式是这样的
>>> sales_data = {'CustomerName': ['cust1', 'cust2', 'cust3', 'cust4'],'CustomerCode': [1,2,3,4], 'Sales': [10,10,15,25], 'Risk':[55,55,45,79]}
>>> sdf = pd.DataFrame.from_dict(sales_Data)
>>> group_data ={'group1': [1,3], 'group2': [2,4]}
您要将客户编号映射到组,因此需要倒序词典:
>>> dc = {v:k for k in group_data.keys() for v in group_data[k]}
{1: 'group1', 3: 'group1', 2: 'group2', 4: 'group2'}
您将客户编号列替换为新列中的组映射,然后重现我上面所做的事情
>>> sdf['groups'] = sdf.replace({'CustomerCode': dc})['CustomerCode']
>>> sdf
CustomerName CustomerCode Sales Risk groups
0 cust1 1 10 55 group1
1 cust2 2 10 55 group2
2 cust3 3 15 45 group1
3 cust4 4 25 79 group2
>>> sdf.groupby('groups').sum()['Sales']
groups
group1 25
group2 35
Name: Sales, dtype: int64