Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用数据帧行的值定义数据帧中的位置?_Python_Pandas - Fatal编程技术网

Python 如何使用数据帧行的值定义数据帧中的位置?

Python 如何使用数据帧行的值定义数据帧中的位置?,python,pandas,Python,Pandas,我想使用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], '

我想使用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:cannotreindexfromDuplicateAxis
为了澄清这一点:
df.a/df.a[0]
对于前4行,
df.a/df.a[4]
对于下4行,
df.a/df.a[8]
对于最后2行,根据
df[“d”]=[0,0,0,4,4,4,4,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] 

因此,对于x=df.d,它总是
df.a/df.a[x]
,我就是这样做的。坦率地说,我会怀疑在数据框中是否需要“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)

df.a[df.d]
是否返回任何内容?您可能需要尝试
df.a.loc[df.d,:]
来代替。a[df.d]会出现所描述的错误,df.a.loc[df.d,:]会出现:keyrerror:“[2011-01-01 0\n..\n2011-01-10 8\nFreq:d,Name:d,dtype:int64]都不在[index]中,您能手动生成一些所需的输出吗?”太好了,非常感谢!那很好用!我想我们肯定需要d列,因为我们需要这一部分来解决一个更复杂的问题:这实际上是另一个问题的第二阶段,第一阶段是如何计算“d”。是这样吗?如果是这样的话,我相信我能帮上忙,但我一辈子都不明白如何从你的另一个问题计算d列。如果你能说清楚,我相信我能很容易地解决,