この質問は、私がここに投稿した前のものの続編です:Slicing Pandas Dataframe according to number of lines。私は問題を解決したすてきな答えを得ました。それにもかかわらず、解決策を別の方法で試してみると、私は期待したことが得られず、多くのテストにもかかわらず、私は理由を理解できません。盗まれたDataFrameスライス?
「Group」Id(1つのグループには多くのオブジェクトがあります)と数量(「R」など)を含むpandasデータフレームdfがあるとします。私は、少なくとも4つのオブジェクトのグループを持つ別のdfを作成したいと思います。そして、Rでソートされたときの4番目のオブジェクトがR_minよりも低いです(私は、最大 'R_min'を呼び出すには奇妙に聞こえますが、負の値の場合は明るくなり、絶対値が高いほど明るい)。
R_min = -18.8
df_processed = (df[df.Group.map(df.Group.value_counts().ge(4))]
.groupby('Group').filter(lambda x: np.any(x.sort_values('R').iloc[3] <= R_min)))
I:私の問題を解決するには、完璧に動作しているようです、この1、である
df = pd.DataFrame({ 'R' : (-21,-21,-22,-3,-23,-24,-20,-19,-34,-35,-30,-5,-25,-6,-7,-22,-21,-10,-11,-12,-13,-14,-15),
....: 'Group': (1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5) })
:ここでの問題のために構築モックデータフレームです私の拘束の下に残っているのはグループ3だけです。今、私の銀河団のカタログがどのように構造化されているかを確認するために、私は少なくとも4人のメンバーを持つ人のうち何が残っているかを確認します。
df_left = (df[df.Group.map(df.Group.value_counts().ge(4))]
.groupby('Group').filter(lambda x: np.any(x.sort_values('R').iloc[3] > R_min)))
残念ながら、それはしません:ここ
最もstricking点は、グループ3はdf_leftでもあるということで、私は正確に同じように機能するために、次のようなコードを期待します! Rでソートされたグループ3は-35、-34、-30、-19、-5を与え、そのうちの4番目の値は-19で-18.8より小さい。どうして?選択方法が間違っていますか?どうすれば修正できますか?
感謝
リンク先は私から回答を受けました。あなたがそれを指摘したので、それにわずかな誤りがありました。私は必要な変更を加えてその投稿を更新しました。 –
クール、ありがとう! :) – Matt