首页 > 解决方案 > 过滤没有结果的内容时如何获得零列?

问题描述

我正在尝试过滤某些内容,但是如果没有结果,我想获得“零”列而不是空白 df。我需要这个,因为它会被输入到更下方的求和方程中,并让它空白起来。看:

>>> df
    id    name    price     qty
    0001   'bob'    100     4
    0001   'bob'     67     5
    0001   'bob'     63     6
    0002  'jack'     67     3
    0002  'jack'     98     7
    0002  'jack'     90     12
    0003  'jack'     60     3
    0003  'jack'     78     7 
    0003  'rose'     87     15

df_jim_frank_qty = df[df['name'].isin(['jim','frank'])]
df_jim_frank_qty

>>> df_jim_frank_qty
    id    name    price     qty

我需要它看起来像这样:

>>> df_jim_frank_qty
    id    name    price     qty
    NaN   NaN     NaN       0

我怀疑我必须在那里放置某种 IF 参数并手动创建它,但我不确定如何。有什么想法吗?

谢谢!

标签: pythonpandasfiltersum

解决方案


用 . 检查条件df.empty。如果True,则pd.concat与 一起使用pd.Series

In [1063]: y = df[df['name'].isin(['jim','frank'])]

In [1068]: if y.empty:
      ...:     x = pd.concat([y, pd.Series([np.nan, np.nan, np.nan, 0])], 1).dropna(how='all')
      ...: 

In [1069]: x
Out[1069]: 
   id name  price  qty    0
3 NaN  NaN    NaN  NaN  0.0

推荐阅读