使用variab存储分组数据

2024-05-19 21:38:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个关于熊猫的一般性问题。我有一个名为d的数据框,里面有很多关于公园的信息。所有唯一的公园名称都存储在一个名为parks的数组中。另一列有一个位置ID,我想遍历parks数组并打印与该park名称相关联的唯一位置ID计数。你知道吗

d[d['Park']=='AKRO']
len(d['Location'].unique()) 

我数了24824次。你知道吗

x = d[d['Park']=='AKRO']
print(len(x['Location'].unique()))

给我一个位置计数1。为什么?我以为这些都是一样的,除了我存储在一个变量的信息。你知道吗

所以我尝试的循环自然不起作用。有人有小费吗?你知道吗

counts=[]
for p in parks:
    x= d[d['Park']==p]
    y= (len(x['Location'].unique()))
    counts.append([p,y])

Tags: 数据名称信息idparklenlocation数组
3条回答

你可以试试

d.groupby('Park')['Location'].nunique()

小心使用Panda的DataFrame函数,它是否会产生内联更改。例如,d[d['Park']=='AKRO']实际上并没有改变数据帧d。但是,x = d[d['Park']=='AKRO']d[d['Park']=='AKRO']的输出设置为x,因此x现在只有一个位置。你知道吗

您是否手动检查过“AKRO”有多少唯一的位置标识?for循环在y= len(x['Location'].unique())周围的额外括号外看起来是正确的

当您第一次使用子集时,您没有将d[d['Park'] == 'ARKO']赋值给任何对象。所以你并没有改变数据。你只查看了那部分数据。你知道吗

当您分配x = d[d['Park']=='AKRO']时,x现在只是您用第一个命令查看的部分。这就是为什么你得到了你所观察到的差异。你知道吗

for循环实际上只在d的列中循环。如果您希望循环浏览这些行,可以使用以下命令。你知道吗

for idx, row in d.iterrows():
    print(idx, row)

然而,如果你想用for循环来计算地点的数量,你必须在每个公园中循环。像下面这样。你知道吗

for park in d['Park'].unique():
    print(park, d.loc[d['Park'] == park, 'Location'].size())

但是,您可以不用迭代就完成您的目标。最好采用这种方法。你知道吗

d.groupby('Park')['Location'].nunique()

相关问题 更多 >