gpt4 book ai didi

python - 根据对 Reset_index 进行的计算创建列时出现意外行为

转载 作者:行者123 更新时间:2023-12-01 01:43:39 26 4
gpt4 key购买 nike

接听时this question ,当我尝试根据数据帧索引上完成的基本计算创建列时,我遇到了我认为意外的行为。 我并不是真正在寻找解决方案,而是试图找出为什么发生这种情况。我可能忽略了一些基本的东西......

设置:

np.random.seed(42)

df = pd.DataFrame(np.random.randint(0,5,9), index=[0,1,2,0,1,2,0,1,2])

>>> df
0
0 3
1 4
2 2
0 4
1 4
2 1
0 2
1 2
2 2

奇怪的行为:

假设我正在尝试获取索引等于 0 的位置的累积和。我可以通过以下方式轻松获得:

>>> df.reset_index()['index'].eq(0).cumsum()
0 1
1 1
2 1
3 2
4 2
5 2
6 3
7 3
8 3
Name: index, dtype: int64

但是,如果我尝试将其直接分配给新列,结果就不正确:

df['new_column'] = df.reset_index()['index'].eq(0).cumsum()

>>> df
0 new_column
0 3 1
1 4 1
2 2 1
0 4 1
1 4 1
2 1 1
0 2 1
1 2 1
2 2 1

如果我使用分配,也会发生同样的情况:

df.assign(new_column = df.reset_index()['index'].eq(0).cumsum())

预期行为:

我预计结果如下:

>>> df
0 new_column
0 3 1
1 4 1
2 2 1
3 4 2
4 4 2
5 1 2
6 2 3
7 2 3
8 2 3

解决方法:

有很多解决方法,例如:

df = df.reset_index().rename(columns={'index':'tmp'})

df['new_column'] = df.tmp.eq(0).cumsum()

df.drop('tmp', axis=1, inplace=True)

或者

df.loc[0,'new_column'] = 1

df['new_column'] = df['new_column'].fillna(0).cumsum().astype(int)

问题:

但正如我所说,我只对为什么当我直接从 reset_index() 分配新列时将其设置为 1

感谢您的意见!

最佳答案

仅仅因为pandas将此匹配设置为索引。

您的系列是:

0    1
1 1
2 1
3 2
4 2
5 2
6 3
7 3
8 3

上面索引 0、1 和 2 的值都是 1

一旦您的 df 仅将这些值作为索引,它将为所有行分配 1。

关于python - 根据对 Reset_index 进行的计算创建列时出现意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51622992/

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