gpt4 book ai didi

python - 如何使用数据框行的值在数据框中定义位置?

转载 作者:太空宇宙 更新时间:2023-11-04 03:32:11 24 4
gpt4 key购买 nike

我想使用 df.d 的值来定义位置,即 df.a 在应用计算时所指的位置。但这显然行不通。

import pandas as pd
import numpy as np
import datetime

randn = np.random.randn
rng = pd.date_range('1/1/2011', periods=10, freq='D')

df = pd.DataFrame({'a': [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0], 'b': [1.1, 1.7, 1.3, 1.6, 1.5, 1.1, 1.5, 1.7, 2.1, 1.9],'c':[None] * 10},index=rng)


df["d"]= [0,0,0,0,4,4,4,4,8,8]
df["c"] =df.a/df.a[df.d]

但我只是收到错误 ValueError: cannot reindex from a duplicate axis
为了澄清这一点:df.a/df.a[0] 用于前 4 行,df.a/df.a[4] 用于接下来的 4 行和 df.a/df.a[8] 根据 df["d"]= [0,0,0,0,4,4,4,4, 最后 2 行, 8,8]那么我如何才能正确地引用数据帧中的值,而不会出现此错误?

所需的输出如下所示:

              a    b     c                       d
2011-01-01 1.1 1.1 1 0 # df.a/df.a[0]
2011-01-02 1.2 1.7 1.090909090909091 0 # df.a/df.a[0]
2011-01-03 1.3 1.3 1.181818181818182 0 # df.a/df.a[0]
2011-01-04 1.4 1.6 1.272727272727273 0 # df.a/df.a[0]
2011-01-05 1.5 1.5 1 4 # df.a/df.a[4]
2011-01-06 1.6 1.1 1.066666666666667 4 # df.a/df.a[4]
2011-01-07 1.7 1.5 1.133333333333333 4 # df.a/df.a[4]
2011-01-08 1.8 1.7 1.2 4 # df.a/df.a[4]
2011-01-09 1.9 2.1 1 8 # df.a/df.a[8]
2011-01-10 2.0 1.9 1.052631578947368 8 # df.a/df.a[8]

所以它总是 df.a/df.a[x] for x = df.d

最佳答案

这就是我要做的。坦率地说,我怀疑是否需要在数据框中添加“d”列。我会把它分开。然而,如果你真的想那样做,那么使用你的设置你可以简单地写:

df['c'] =   pd.Series([df.ix[x, 'a']/df.ix[int(df.ix[x, 'd']), 'a'] 
for x in xrange(len(df))],
index = df.index)

In [107]: df
Out[107]:
a b d c
2011-01-01 1.1 1.1 0 1.000000
2011-01-02 1.2 1.7 0 1.090909
2011-01-03 1.3 1.3 0 1.181818
2011-01-04 1.4 1.6 0 1.272727
2011-01-05 1.5 1.5 4 1.000000
2011-01-06 1.6 1.1 4 1.066667
2011-01-07 1.7 1.5 4 1.133333
2011-01-08 1.8 1.7 4 1.200000
2011-01-09 1.9 2.1 8 1.000000
2011-01-10 2.0 1.9 8 1.052632

我建议以下是更合理的设置:

df = pd.DataFrame({ 'a': [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0], 
'b': [1.1, 1.7, 1.3, 1.6, 1.5, 1.1, 1.5, 1.7, 2.1, 1.9]},
index=rng)
indexer = [0, 0, 0, 0, 4, 4, 4, 4, 8, 8]
df['c'] = pd.Series([df.ix[x, 'a']/df.ix[indexer[x], 'a'] for x in xrange(len(df))],
index = df.index)

关于python - 如何使用数据框行的值在数据框中定义位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30678484/

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