gpt4 book ai didi

python - 为什么 loc 和 iloc 在对 pandas DataFrame 的行进行切片时工作方式不同?

转载 作者:太空宇宙 更新时间:2023-11-04 02:22:29 25 4
gpt4 key购买 nike

我想要一个 DataFrame,其中一列(称为“cat”)的顶行的值为“LOW”,框架的中部和底部的值为“MID”和“HI”。因此,对于 1,200 行的帧,cat 列的值计数应导致:

LOW    400
MID 400
HI 400

这应该很容易。但是,显然事实并非如此。无济于事,我尝试使用 df.loc[-400:,["cat"]] = "HI"

选择和更改底行

但是,这种方法确实适用于顶行:df.loc[:399,["cat"]] = "LOW"

下面的示例显示了一个工作示例,请注意它需要 lociloc。这是 pandas 可以改进的地方吗?

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.random([1200, 4]), columns=['A', 'B', 'C', 'D'])
df["cat"] = "MID"
df.loc[:399,["cat"]] = "LOW"
df.iloc[-400:,-1] = "HI" # The -1 selects the last column ('cat') - not ideal.
df.cat.value_counts()

最佳答案

使用get_loc对于 cat 列的位置如果想通过 iloc 按位置选择 - 需要索引和列的位置:

df = pd.DataFrame(np.random.random([1200, 4]), columns=['A', 'B', 'C', 'D'])
df["cat"] = "MID"

df.iloc[:400,df.columns.get_loc('cat')] = "LOW"
df.iloc[-400:,df.columns.get_loc('cat')] = "HI"

详细信息:

print (df.columns.get_loc('cat'))
4

替代方法是使用 loc 按标签选择 - 然后需要通过索引选择索引的 400 值:

df.loc[df.index[:400],"cat"] = "LOW"
df.loc[df.index[-400:],"cat"] = "HI"

a = df.cat.value_counts()
print (a)
MID 400
HI 400
LOW 400
Name: cat, dtype: int64

设置 400 个值的另一种方法是使用 numpy.repeat或通过重复列表来设置值:

df["cat"] =  np.array(["LOW", "MID", "HI"]).repeat(400)

df["cat"] = ["LOW"] * 400 + ["MID"] * 400 + ["HI"] * 400
#thanks @Quickbeam2k1
df = df.assign(cat = ['LOW']*400 + ['MID']*400 + ['HIGH']*400 )

关于python - 为什么 loc 和 iloc 在对 pandas DataFrame 的行进行切片时工作方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51229216/

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