将客户组的值写入系列

时间:2019-08-01 08:02:29

标签: pandas dataframe

我有一个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:
           ...



1 个答案:

答案 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