gpt4 book ai didi

pandas - 将 Int64Index 转换为 Int

转载 作者:行者123 更新时间:2023-12-04 04:16:39 24 4
gpt4 key购买 nike

我正在遍历一个数据框(称为 hdf)并逐行应用更改。 hdf 按 group_id 排序,并根据某些条件分配 1 到 n 等级。

# Groupby function creates subset dataframes (a dataframe per distinct group_id).
grouped = hdf.groupby('group_id')

# Iterate through each subdataframe.
for name, group in grouped:

# This grabs the top index for each subdataframe
index1 = group[group['group_rank']==1].index

# If criteria1 == 0, flag all rows for removal
if(max(group['criteria1']) == 0):
for x in range(rank1, rank1 + max(group['group_rank'])):
hdf.loc[x,'remove_row'] = 1

我收到以下错误:
TypeError: int() argument must be a string or a number, not 'Int64Index'

当我尝试明确地强制转换 rank1 时,我得到了同样的错误我得到了同样的错误:
rank1 = int(group[group['auction_rank']==1].index)

有人可以解释正在发生的事情并提供替代方案吗?

最佳答案

您的具体问题的答案是 index1是一个 Int64Index(基本上是一个列表),即使它只有一个元素。要获得那个元素,您可以使用 index1[0] .

但是有更好的方法来实现你的目标。如果要删除“坏”组中的所有行,可以使用 filter :

hdf = hdf.groupby('group_id').filter(lambda group: group['criteria1'].max() != 0)

如果您只想删除匹配组中的某些行,您可以编写一个函数,然后使用 apply :
def filter_group(group):
if group['criteria1'].max() != 0:
return group
else:
return group.loc[other criteria here]

hdf = hdf.groupby('group_id').apply(filter_group)

(如果你真的喜欢你目前的做事方式,你应该知道 loc 将接受一个索引,而不仅仅是一个整数,所以你也可以这样做 hdf.loc[group.index, 'remove_row'] = 1 )。

关于pandas - 将 Int64Index 转换为 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33111473/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com