【发布时间】:2016-10-20 09:57:47
【问题描述】:
我想要一个函数,例如get_cluster(df, numspan),给定一个 pandas DataFrame df 和一个整数 numspan 作为输入,返回一个标签(数字)的 DataFrame df_cluster,表示根据 max 和 min 之间的差异计算的子集中的成员资格DataFrame 除以 numspan。
换句话说:
- 取df,例如
1, 2, 3, 4, 5(不一定是有序的,可能是实数) - 获取最大
5和最小1 - 计算差值
5 - 1 = 4,表示主集宽度 - 将差值除以 numspan,例如
2获取子集单元宽度2 - 然后为 DataFrame 的每个项目检查它属于哪个子集(规则是 L1 其中 L1 和 L2 是子集的下限和上限)
- 返回一个代表相关子集的数字,因此最终的df_cluster为
1, 1, 2, 2, 2(规则包含与最大上限对应的最后一个标签)
我的代码(还有一个例子,见下图):
import pandas as pd
df = pd.DataFrame({'A':pd.Series([4, 8, 2, 3])})
def get_cluster(df, numspan):
min = df.min() # e.g. 2
max = df.max() # e.g. 8
span = max - min # e.g. 6
subset_unit = span/numspan # e.g. 6/3 = 2 -> every subset is 2 width
# code I need...
return df_cluster
df['Cluster'] = get_cluster(df, 3)
df
A Cluster
0 4 2
1 8 3 <= included by rule
2 2 1
3 3 1
图片中:
非常感谢您的帮助和时间,
吉尔伯托
更新
感谢@Boud,快速而优雅的解决方案是:
numbins = 3
labelnames = list(range(1, numbins +1))
df['Cluster'] = pd.cut(df['A'], bins = numbins, labels = labelnames, right=False, include_lowest=True)
【问题讨论】:
标签: python pandas dataframe label subset