大熊猫根据一个数字条件分组



这是我的问题:

我在这个表单上有一个数据帧:

name number 
A     2
B     10
C     25
D     35
E     45
F     55

我想以数字为条件对名称进行分组。更详细地说,我想按间隔分组:

[0,15), [15,40), [40,+inf)

所以我想要

(A, B), (C, D), (E,F)

你知道是否有可能得到它吗?谢谢

pandas.cut用于新列或Series:

df['bins'] = pd.cut(df['number'], bins=[0,15,40, np.inf], right=False, include_lowest=True)
print (df)
name  number          bins
0    A       2   [0.0, 15.0)
1    B      10   [0.0, 15.0)
2    C      25  [15.0, 40.0)
3    D      35  [15.0, 40.0)
4    E      45   [40.0, inf)
5    F      55   [40.0, inf)
s = pd.cut(df['number'], bins=[0,15,40, np.inf], right=False, include_lowest=True)

然后使用groupby和类似的聚合

df1 = df.groupby('bins').sum()
print (df1)
bins                
[0.0, 15.0)       12
[15.0, 40.0)      60
[40.0, inf)      100

或者使用Series:

df1 = df.groupby(s).sum()

如果需要元组:

s = pd.cut(df['number'], bins=[0,15,40, np.inf], right=False, include_lowest=True)
out = [tuple(x) for x in df.groupby(s)['name'].apply(list)]
print (out)
[('A', 'B'), ('C', 'D'), ('E', 'F')]

您可以始终迭代数据帧并应用条件。这可能不是最好的解决方案,但这应该有效:

list1 = []
list2 = []
list3 = []
for i in range(df.shape[0]):
if df['number'][i] < 15:
list1.append['name']
if df['number'][i] >= 15 & df['number'][i] < 40:
list2.append['name']
if df['number'][i] > 15:
list3.append['name']

希望这能帮助

最新更新