我正在寻找一个好的转变,熊猫,这将允许我从一个时间序列的测量到一个计数-每个垃圾箱的清单。
假设我有我的:
x = list(range(count))
y = [random.gauss(1, 0.1) for _ in range(count)]我可以把它转换成两边的二进制间隔:
df = pandas.DataFrame.from_dict({'x': x, 'y': y})
df['x'].update(pandas.cut(df['x'], 20))
df['y'].update(pandas.cut(df['y'], 20))我知道我可以使用以下方法获得y的值计数:
df['y'].value_counts()但是我很难将“Runvalue_counts on y”按唯一的x值分组,然后展开,然后返回到一个有效的操作中。
示例:
y = [1, 1, 2, 3, 4, 4]
x = [0, 1, 2, 3, 4, 5]
bin_count = 2预期:
df: x y count
0-2 1 2
0-2 2 1
3-5 3 1
3-5 4 2发布于 2018-11-20 10:25:40
我相信你需要SeriesGroupBy.value_counts和reset_index
y = [1, 1, 2, 3, 4, 4]
x = [0, 1, 2, 3, 4, 5]
bin_count = 2
df = pd.DataFrame.from_dict({'x': x, 'y': y})
df['x'].update(pd.cut(df['x'], bin_count))
df1 = df.groupby('x')['y'].value_counts().reset_index(name='count')
print (df1)
x y count
0 (-0.005, 2.5] 1 2
1 (-0.005, 2.5] 2 1
2 (2.5, 5.0] 4 2
3 (2.5, 5.0] 3 1对于来自y的列,请使用unstack
df1 = df.groupby('x')['y'].value_counts().unstack(fill_value=0)
print (df1)
y 1 2 3 4
x
(-0.005, 2.5] 2 1 0 0
(2.5, 5.0] 0 0 1 2编辑:
如果需要bins的唯一值,将参数labels=False添加到cut
df['x'].update(pd.cut(df['x'], bin_count, labels=False))
df1 = df.groupby('x')['y'].value_counts().unstack(fill_value=0)
print (df1)
y 1 2 3 4
x
0 2 1 0 0
1 0 0 1 2https://stackoverflow.com/questions/53390778
复制相似问题