在Python中基于多个行值填充列

时间:2016-06-01 20:17:30

标签: python pandas dataframe group-by

我有一个数据框A,其中包含一些我要填充的空单元格,其数据框为B。以下是一个示例数据:

A=
    Month   Type    Sale
    2016-01 A       20
    2016-02 A       10
    2016-01 B       40
    2016-02 B       30
    2016-01 C   
    2016-02 C   
    2016-01 D   
    2016-02 D   

B=
    Month   Type    Sale
    2016-01 A       20
    2016-02 A       10
    2016-01 B       40
    2016-02 B       30
    2016-01 C       60
    2016-02 C       40
    2016-01 D       60
    2016-02 D       40

这就是我所做的:

emptTypes= ['C', 'D']
x = A.groupby('Month', sort = False).Sale.sum()
B['Sale'][B['Type'].isin(emptTypes) & B['Month'].isin(x.index)]=x

没有任何反应!

2 个答案:

答案 0 :(得分:1)

我认为您可以fillna使用sum

df['Sale'] = df.groupby('Month', sort = False).Sale.apply(lambda x: x.fillna(x.sum()))
print (df)
     Month Type  Sale
0  2016-01    A  20.0
1  2016-02    A  10.0
2  2016-01    B  40.0
3  2016-02    B  30.0
4  2016-01    C  60.0
5  2016-02    C  40.0
6  2016-01    D  60.0
7  2016-02    D  40.0

答案 1 :(得分:1)

实际上,由于pandas 0.14你可以直接在数据框上使用fillna,你需要填写缺失值。

A.fillna(B)
Out[8]: 
        Type  Sale
Month             
2016-01    A  20.0
2016-02    A  10.0
2016-01    B  40.0
2016-02    B  30.0
2016-01    C  60.0
2016-02    C  40.0
2016-01    D  60.0
2016-02    D  40.0 

我记得这一点,因为在我问了一段类似的问题之后,公关就是为了加入这个问题。

这将填充A中缺少的值以及与B对应且具有匹配标签(索引/列)的值。这更为通用,因为AB不需要标记相同,并且当您有多索引时代码保持不变。