我的数据框的最小值为零。我正在尝试使用 的precision
和include_lowest
参数pandas.cut()
,但我无法让间隔由整数组成,而不是由一位小数组成的浮点数。我也不能让最左边的间隔停在零。
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style='white', font_scale=1.3)
df = pd.DataFrame(range(0,389,8)[:-1], columns=['value'])
df['binned_df_pd'] = pd.cut(df.value, bins=7, precision=0, include_lowest=True)
sns.pointplot(x='binned_df_pd', y='value', data=df)
plt.xticks(rotation=30, ha='right')
我尝试设置precision
为 -1、0 和 1,但它们都输出一位小数浮点数。pandas.cut()
帮助确实提到 x-min 和 x-max 值扩展了 x 范围的 0.1 %,但我认为也许可以include_lowest
以某种方式抑制这种行为。我目前的解决方法涉及导入 numpy:
import numpy as np
bin_counts, edges = np.histogram(df.value, bins=7)
edges = [int(x) for x in edges]
df['binned_df_np'] = pd.cut(df.value, bins=edges, include_lowest=True)
sns.pointplot(x='binned_df_np', y='value', data=df)
plt.xticks(rotation=30, ha='right')
pandas.cut()
有没有办法在不使用 numpy的情况下直接获得非负整数作为区间边界?
编辑:我刚刚注意到指定right=False
使最低间隔变为0而不是-0.4。它似乎优先include_lowest
,因为更改后者并没有任何可见的效果right=False
。以下间隔仍指定小数点后一位。