Python Pandas返回DataFrame,其中value count高于设定的数字

Ema*_*mac 4 python pandas

我有一个Pandas DataFrame,我想仅在客户编号超过设定次数时才返回DataFrame.

以下是DataFrame的示例:

114  2017-04-26      1       7507       34      13
115  2017-04-26      3      77314       41      14
116  2017-04-27      7       4525      190     315
117  2017-04-27      7       5525       67      94
118  2017-04-27      1       6525       43     378
119  2017-04-27      3       7415       38      27
120  2017-04-27      2       7613       47      10
121  2017-04-27      2      77314        9       3
122  2017-04-28      1        227       17       4
123  2017-04-28      8       4525      205     341
124  2017-04-28      1       7415       31      20
125  2017-04-28      2      77314        8       2
Run Code Online (Sandbox Code Playgroud)

以下是该客户使用此代码发生的次数超过5次:

print(zip_data_df['Customers'].value_counts()>5)

7415      True
4525      True
5525      True
77314     True
6525      True
4111      True
227       True
206      False
7507     False
7613     False
4108     False
3046     False
2605     False
4139     False
4119     False
Run Code Online (Sandbox Code Playgroud)

现在我预计如果我这样做了:

print(zip_data_df[zip_data_df['Customers'].value_counts()>5])
Run Code Online (Sandbox Code Playgroud)

它会向我展示出现超过5次的客户的整个DataFrame,但是我得到了一个布尔错误.我意识到为什么它现在给我一个错误:一个DataFrame只是告诉我该客户编号是否超过5次,而另一个是每次客户编号出现时都会显示给我.它们的长度不匹配.但是我如何获得它以便数据框只返回客户发生超过5次的记录?

我确信有一些简单的答案我会忽略,但我感谢您能给我的任何帮助.

abe*_*abe 7

所以这里的问题是索引:value_counts()返回一个在'Customers'上编入索引的Series,而zip_data_df似乎在其他东西上编入索引.你可以这样做:

cust_counts = zip_data_df['Customers'].value_counts().rename('cust_counts')

zip_data_df = zip_data_df.merge(cust_counts.to_frame(),
                                left_on='Customers',
                                right_index=True)
Run Code Online (Sandbox Code Playgroud)

从那里,您可以从zip_data_df中有条件地选择,如下所示:

zip_data_df[zip_data_df.cust_counts > 5]
Run Code Online (Sandbox Code Playgroud)


Zak*_*irn 6

我有类似的问题并以这种方式解决了。

cust_counts = zip_data_df['Customers'].value_counts()
cust_list = cust_counts[cust_counts > 5].index.tolist()
zip_data_df = zip_data_df[zip_data_df['Customers'].isin(cust_list)]
Run Code Online (Sandbox Code Playgroud)


DrT*_*TRD 5

我相信你正在寻找的是:

zip_data_df['Customers'].value_counts()[zip_data_df['Customers'].value_counts()>5]
Run Code Online (Sandbox Code Playgroud)