簡體   English   中英

如何根據值計數過濾 pandas DataFrame?

[英]How do I filter a pandas DataFrame based on value counts?

我在 Python 和 pandas DataFrame 的視頻游戲中工作,每個游戲都有一個類型。 我正在嘗試刪除任何類型在 DataFrame 中出現次數少於一定次數的視頻游戲,但我不知道如何解決這個問題 go。 我確實找到了一個似乎相關的 StackOverflow 問題,但我根本無法破譯解決方案(可能是因為我從未聽說過 R,而我的函數式編程 memory 充其量只是生疏了)。

幫助?

使用groupby 過濾器

In [11]: df = pd.DataFrame([[1, 2], [1, 4], [5, 6]], columns=['A', 'B'])

In [12]: df
Out[12]:
   A  B
0  1  2
1  1  4
2  5  6

In [13]: df.groupby("A").filter(lambda x: len(x) > 1)
Out[13]:
   A  B
0  1  2
1  1  4

我建議閱讀文檔split-combine-section

性能更好的解決方案應該是GroupBy.transform ,每個組的計數size為與原始df相同大小的系列,因此可能通過boolean indexing進行過濾:

df1 = df[df.groupby("A")['A'].transform('size') > 1]

或者使用Series.mapSeries.value_counts

df1 = df[df['A'].map(df['A'].value_counts()) > 1]

@jezael 解決方案效果很好,這是一種基於值計數的不同過濾方法:

例如,如果數據集是:

df = pd.DataFrame({'a': [1,2,3,3,1,6], 'b': [11,2,33,4,55,6]})

將計數轉換並保存為字典

ount_freq = dict(df['a'].value_counts())

創建一個新列並復制目標列,將字典映射到新創建的列

df['count_freq'] = df['a']
df['count_freq'] = df['count_freq'].map(count_freq)

現在我們有一個帶有計數頻率的新列,您現在可以使用此列輕松定義閾值和過濾器。

df[df.count_freq>1]

此外,萬一有人想要過濾並擁有“計數”列:

attr = 'A'
limit = 10
df2 = df.groupby(attr)[attr].agg(count='count')
df2 = df2.loc[df2['count'] > limit].reset_index()
print(df2)

#outputs rows with grouped 'A' count > 10 and columns ==> index, count, A

我可能來晚了一點,但是:

df = pd.DataFrame(df_you_have.groupby(['IdA', 'SomeOtherA'])['theA_you_want_to_count'].count())
df.reset_index(inplace=True)

這就是你如何創建一個新的 dataframe 然后過濾它......

df[df['A']>100]

暫無
暫無

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

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