基于 Pandas 范围的 Bin 值 [重复]

Posted

技术标签:

【中文标题】基于 Pandas 范围的 Bin 值 [重复]【英文标题】:Bin values based on ranges with pandas [duplicate] 【发布时间】:2015-10-22 13:43:50 【问题描述】:

我在一个文件夹中有多个具有类似值的 CSV 文件:

GroupID.csv 是文件名。有多个这样的文件,但值范围是在同一个 XML 文件中定义的。我正在尝试将它们分组 我该怎么做?

更新1: 基于 BobHaffner 的 cmets,我已经做到了

import pandas as pd 
import glob path =r'path/to/files' 
allFiles = glob.glob(path + "/*.csv")
frame = pd.DataFrame()
list_ = []
for file_ in allFiles:
    df = pd.read_csv(file_,index_col=None, header=None)
    df['file'] = os.path.basename('path/to/files/'+file_)
    list_.append(df)
frame = pd.concat(list_)
print frame

得到这样的东西:

我需要根据 XML 文件中的 bin 对值进行分组。我真的很感激任何帮助。

【问题讨论】:

这里有几个问题。我建议尝试将 csvs 放入一个数据框中作为第一步。查看 glob 模块和 pandas read_csv() 和 concat() @BobHaffner 我可以做到。在连接时,它会丢失文件名。不会吗? 您可以在每个数据框中使用文件名创建一个附加字段。那会起作用的,对吧? 然后将它们连接起来 是的,我会这样做的。 @BobHaffner 【参考方案1】:

为了存储您的系列,您应该使用the pd.cut() function,如下所示:

df['bin'] = pd.cut(df['1'], [0, 50, 100,200])

         0    1        file         bin
0  person1   24     age.csv     (0, 50]
1  person2   17     age.csv     (0, 50]
2  person3   98     age.csv   (50, 100]
3  person4    6     age.csv     (0, 50]
4  person2  166  Height.csv  (100, 200]
5  person3  125  Height.csv  (100, 200]
6  person5  172  Height.csv  (100, 200]

如果您想自己命名垃圾箱,可以使用labels= 参数,如下所示:

df['bin'] = pd.cut(df['1'], [0, 50, 100,200], labels=['0-50', '50-100', '100-200'])

         0    1        file      bin
0  person1   24     age.csv     0-50
1  person2   17     age.csv     0-50
2  person3   98     age.csv   50-100
3  person4    6     age.csv     0-50
4  person2  166  Height.csv  100-200
5  person3  125  Height.csv  100-200
6  person5  172  Height.csv  100-200

【讨论】:

以上是关于基于 Pandas 范围的 Bin 值 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

pandas 学习 第10篇:DataFrame 数据处理(应用追加截断连接合并重复值重索引重命名重置索引设置轴索引选择和过滤)

Pandas 重复数据处理大全

pandas 重复数据处理大全(附代码)

基于多列值的具有重复键的两个大型 Pandas DataFrame 的条件合并/连接 - Python

在多个时间范围内聚合/重采样 pandas 多索引数据帧并预测 ARIMA

Pandas按组内的值分组和排序[重复]