【问题标题】:Inserting dummy information to dataframe将虚拟信息插入数据帧
【发布时间】:2017-08-04 13:33:16
【问题描述】:

大家好,我有 3 个数据框:

df1
   LC_REF   Category    vals
0 DT 17 1C     WM       dog
1 DT 17 1C     WH       foo, bat
2 DT 17 1C     WP       red, steam

df2
   LC_REF   Category    vals
0 DT 17 1C     WM       cat
1 DT 17 1C     WH       sea, bat

df3
   LC_REF   Category    vals
0 DT 17 1C     WM       turn

我想知道是否有任何方法可以在“类别”列中填写所有没有 WM、WH、WP 的数据框,并像这样插入缺少的类别:

df1
   LC_REF   Category    vals
0 DT 17 1C     WM       dog
1 DT 17 1C     WH       foo, bat
2 DT 17 1C     WP       red, steam

df2
   LC_REF   Category    vals
0 DT 17 1C     WM       cat
1 DT 17 1C     WH       sea, bat
2 DT 17 1C     WP       NaN

df3
   LC_REF   Category    vals
0 DT 17 1C     WM       turn
1 DT 17 1C     WH       NaN
2 DT 17 1C     WP       NaN

我的尝试:

if df.loc[:, df.Category.isin(['WM', 'WH','WP']).count() == 3 :
    continue
else:
    ???

我知道我需要涉及布尔掩码,但我不太确定如何最好地执行它。

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:
    df2.index=df2.Category
    df2=df2.reindex(['WM','WH','WP'])
    df2['LC_REF']=df2[['LC_REF']].ffill()
    df2.Category=df2.index
    
                  LC_REF Category      vals
    Category                               
    WM        0 DT 17 1C       WM       cat
    WH        1 DT 17 1C       WH  sea, bat
    WP        1 DT 17 1C       WP       NaN
    

    这是另一个使用pd.concat, stack, unstack的解决方案

    DF=pd.concat([df1,df2],axis=0,keys=['df1','df2']).reset_index()
    DF=DF.groupby(["level_0","Category"]).agg({'LC_REF':'sum','vals':'sum'}).unstack('Category').stack('Category', dropna=False)
    DF['LC_REF'].ffill(inplace=True)
    
    
    DF
    Out[696]: 
                          LC_REF        vals
    level_0 Category                        
    df1     WH        1 DT 17 1C    foo, bat
            WM        0 DT 17 1C         dog
            WP        2 DT 17 1C  red, steam
    df2     WH        1 DT 17 1C    sea, bat
            WM        0 DT 17 1C         cat
            WP        0 DT 17 1C        None
    

    PS:使用DF.loc['df1']分割df1

    NaNNone 的不同之处你可以找到here

    【讨论】:

    • 这太棒了!请问您是如何想到这个解决方案的?
    • @codeninja 你可以看看reindex,它会将缺失的索引插入为NaN
    • @codeninja 我提供了另一种更“python”的方式,如果你有问题请告诉我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多