我已使用下面的代码根据“小时费率”和“小时费率四分位数”对我的Pandas数据帧进行分组。
e = df.groupby(['Hourly Rate Quartile', 'Hourly Rate']).size().reset_index(name='Count')
print(e)
这会打印出我的三列。
我现在想过滤这些结果并仅打印那些具有Count> 1的结果。
我尝试了许多不同的方式:
if e.loc[e['Count']] > 1:
print (e)
在此之前,我还使用过:
if e['Count'] > 1:
print (e)
在两种情况下,我都会得到一个ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我也尝试了一个For循环。
for i in e['Count']:
if i>1:
print(i)
哪一个给我正确的结果,但我想得到所有三列。
所以,当我尝试:
for i in e['Count']:
if i>1:
print(e)
它将再次打印所有内容。
这是我尝试过的最后一件事:
for i in e:
if i['Count']>1:
print(i)
哪个给我这个错误:string indices must be integers.
你们有什么想法吗?
答案 0 :(得分:0)
In [1]: df = pd.DataFrame({'c1': list("aacd"), 'c2': list("bbcd")})
In [2]: df
Out[2]:
c1 c2
0 a b
1 a b
2 c c
3 d d
In [3]: series = df.groupby(['c1', 'c2']).size()
In[4]: series
Out[4]:
c1 c2
a b 2
c c 1
d d 1
dtype: int64
In [5]: series[series > 1]
Out[5]:
c1 c2
a b 2
dtype: int64
答案 1 :(得分:0)
import pandas as pd
import numpy as np
df = pd.DataFrame([['A', 5],
['A', 4.],
['B', 1],
['B', 2]], columns=['col1', 'col2'])
df = pd.merge(df,
(df
.groupby('col1')
.count()
.reset_index()
.rename(columns={'col2': 'count'})),
how='left',
on='col1')
xx = df.loc[df['count'] > 1]