基于 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 DataFrame 的条件合并/连接 - Python