2017-08-21 3 views
2

私は各行の新聞記事のメタデータを持つDataFrameを持っています。私はその後、(typeと呼ばれる)1列の値をカウントし、毎月のチャンクにグループこれらをしたいと思います:パンダグループでvalue_countsを使用しているときに、空のシリーズを無視するにはどうすればよいですか?

monthly_articles = articles.groupby(pd.Grouper(freq="M")) 
monthly_articles = monthly_articles["type"].value_counts().unstack() 

これは毎年恒例のグループと正常に動作しますが、私は月ごとにグループにしようとすると失敗します。

ValueError: operands could not be broadcast together with shape (141,) (139,) 

これは記事がない月のグループがいくつかあるためだと思います。私は、各グループにグループや印刷value_countsを繰り返す場合:value_counts()を使用しているとき、私は空のグループを無視することができますどのように

2005-12-31 00:00:00 positive 1 
Name: type, dtype: int64 
2006-01-31 00:00:00 Series([], Name: type, dtype: int64) 
2006-02-28 00:00:00 Series([], Name: type, dtype: int64) 
2006-03-31 00:00:00 negative 6 
positive 5 
neutral  1 
Name: type, dtype: int64 
2006-04-30 00:00:00 negative 11 
positive  6 
neutral  3 
Name: type, dtype: int64 

for name, group in monthly_articles: 
    print(name, group["type"].value_counts()) 

私は2006年の月と2月のためのグループ内の空のシリーズを取得します?

私はdropna=Falseを試してみましたが、成功しませんでした。私はこれがthis questionと同じ問題だと思います。

答えて

3

データサンプルを提供する方がよいでしょう。それ以外の場合は、問題を指摘するのは少し難しいです。あなたのコードスニペットから、typeのデータが何ヶ月もnullであるようです。グループ化されたオブジェクトに対してapply関数を使用し、unstack関数を呼び出すことができます。ここでは私の作品のサンプルコードであり、データがランダムにNULL値がある場合には

s = pd.Series(['positive', 'negtive', 'neutral'], index=[0, 1, 2]) 
atype = s.loc[np.random.randint(3, size=(150,))] 

df = pd.DataFrame(dict(atype=atype.values), index=pd.date_range('2017-01-01', periods=150)) 

gp = df.groupby(pd.Grouper(freq='M')) 
dfx = gp.apply(lambda g: g['atype'].value_counts()).unstack() 

In [75]: dfx 
Out[75]: 
      negtive neutral positive 
2017-01-31  13  9   9 
2017-02-28  11  11   6 
2017-03-31  12  6  13 
2017-04-30  8  12  10 
2017-05-31  9  10  11 

が生成されます。

In [76]: df.loc['2017-02-01':'2017-04-01', 'atype'] = np.nan 
    ...: gp = df.groupby(pd.Grouper(freq='M')) 
    ...: dfx = gp.apply(lambda g: g['atype'].value_counts()).unstack() 
    ...: 

In [77]: dfx 
Out[77]: 
      negtive neutral positive 
2017-01-31  13  9   9 
2017-04-30  8  12   9 
2017-05-31  9  10  11 

おかげで。

+0

これは完璧に動作します。ありがとうございます。 – user2950747

関連する問題