簡體   English   中英

根據Python中的多個行值填充列

[英]filling columns based on multiple row values in Python

我有一個帶有一些空單元格的數據框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

並沒有任何反應!

我認為您可以按sum使用fillna

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

實際上,由於pandas 0.14,您可以直接在數據fillna上使用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 

我記得這一點,因為不久前我問了類似的問題之后,就進行了PR合並。

這將用與B對應的,具有匹配標簽(索引/列)的值填充A的缺失值。 這是更通用的,因為AB不需要相同的標簽,並且當您具有多索引時,代碼保持不變。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM