1 回答
TA贡献1831条经验 获得超4个赞
计算数据帧中每个值的出现次数,将频率范围以 10 为一组进行分组,然后为每个范围创建
dict一个DataFrames。垃圾箱标签将成为
dict钥匙该
bins列是分类的,因此.groupby将为每个标签创建一个组,即使该组为空,因此使用pandas.DataFrame.empty,因此只有非空组才会添加到dictof 中DataFrames。替换
g: dfg为中g: pd.DataFrame(dfg.B)只有列。Bdict使用
dfg.reset_index(drop=True)或pd.DataFrame(dfg.B).reset_index(drop=True)删除原始索引。labels使用,因为它们更容易用作dict密钥如果不使用
labels,dict键将是Interval, 就像[Interval(10, 20, closed='right'),这很麻烦。df.B.map(df.groupby('B')['B'].count())也有效,但不是必需的。
使用
pandas.Series.value_counts()和pandas.Series.map在 中创建一个计数列df,它将传达列中值的频率B。用于
pd.cut对频率范围进行分类pandas.DataFrame.groupby与 a 一起使用可根据 bin 标签dict-comprehension创建dictof 。DataFrames
import pandas as pd
import numpy as np
# setup test dataframe
np.random.seed(365)
df = pd.DataFrame({'B': np.random.randint(5238, size=(200000))})
# add a counts column to the dataframe
df['counts'] = df.B.map(df.B.value_counts())
# create a bins column for the frequency range
bins = range(0, 201, 10)
labels = range(10, 201, 10)
df['bins'] = pd.cut(df.counts, bins=bins, right=True, labels=labels)
# display(df.head())
B counts bins
0 2740 37 40
1 4897 41 50
2 4955 45 50
3 428 31 40
4 226 34 40
# create a dict of dataframes for the non-empty bins
dfd = {g: dfg for g, dfg in df.groupby('bins') if not dfg.empty}
# print dict keys
dfd.keys()
[out]:
dict_keys([20, 30, 40, 50, 60, 70])
# display(dfd[20].head())
B counts bins
5350 4986 19 20
5646 4952 20 20
11232 3728 19 20
11707 2819 20 20
13547 3728 19 20
添加回答
举报
