我确信这个问题一定有一个非常简单的解决方案,但是我没有找到它(浏览之前提出的问题,我没有找到我想要或不理解的答案)。
我有一个类似的数据框(只是大得多,有更多的行和列):

      x   val1   val2   val3
0    0.0  10.0   NaN    NaN
1    0.5  10.5   NaN    NaN
2    1.0  11.0   NaN    NaN
3    1.5  11.5   NaN  11.60
4    2.0  12.0   NaN  12.08
5    2.5  12.5  12.2  12.56
6    3.0  13.0  19.8  13.04
7    3.5  13.5  13.3  13.52
8    4.0  14.0  19.8  14.00
9    4.5  14.5  14.4  14.48
10   5.0  15.0  19.8  14.96
11   5.5  15.5  15.5  15.44
12   6.0  16.0  19.8  15.92
13   6.5  16.5  16.6  16.40
14   7.0  17.0  19.8  18.00
15   7.5  17.5  17.7    NaN
16   8.0  18.0  19.8    NaN
17   8.5  18.5  18.8    NaN
18   9.0  19.0  19.8    NaN
19   9.5  19.5  19.9    NaN
20  10.0  20.0  19.8    NaN

在下一步中,我需要计算每个值列的导数dVal/dx(实际上我有3列以上,所以我需要一个循环中的健壮解决方案,我不能每次都手动选择行)但是由于某些列中的nan值,我面临的问题是x和val的维数不同。我觉得克服这个问题的方法是只选择那些x间隔,val是notnull但我做不到。我可能犯了一些非常愚蠢的错误(我不是一个程序员,而且我非常没有天赋,所以请耐心对待我:))。
这是迄今为止的代码(现在我想起来了,我可能只是因为留下了一些旧代码片段而引入了一些错误,因为我已经处理了一段时间,尝试了不同的事情):
import pandas as pd
import numpy as np

df = pd.read_csv('H:/DocumentsRedir/pokus/dataframe.csv', delimiter=',')

vals = list(df.columns.values)[1:]

for i in vals:
    V = np.asarray(pd.notnull(df[i]))

    mask = pd.notnull(df[i])
    X = np.asarray(df.loc[mask]['x'])

    derivative=np.diff(V)/np.diff(X)

但我有个错误:
ValueError: operands could not be broadcast together with shapes (20,) (15,)

所以,显然,它并没有只选择notnull值。。。
有没有一个明显的错误,我正在作出或不同的方法,我应该采取谢谢!
(还有另一个不那么重要的问题:np.diff是这里使用的正确函数还是我最好用有限差分手动计算它我觉得numpy文档不是很有帮助。)

最佳答案

要计算dVal/dX:

dVal = df.iloc[:, 1:].diff()  # `x` is in column 0.
dX = df['x'].diff()
>>> dVal.apply(lambda series: series / dX)

    val1  val2  val3
0    NaN   NaN   NaN
1      1   NaN   NaN
2      1   NaN   NaN
3      1   NaN   NaN
4      1   NaN  0.96
5      1   NaN  0.96
6      1  15.2  0.96
7      1 -13.0  0.96
8      1  13.0  0.96
9      1 -10.8  0.96
10     1  10.8  0.96
11     1  -8.6  0.96
12     1   8.6  0.96
13     1  -6.4  0.96
14     1   6.4  3.20
15     1  -4.2   NaN
16     1   4.2   NaN
17     1  -2.0   NaN
18     1   2.0   NaN
19     1   0.2   NaN
20     1  -0.2   NaN

我们区分所有列(第一列除外),然后对每列应用lambda函数,该函数将其除以columnX中的差异。

关于python - 如何在Pandas DataFrame中获取值的索引?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38580073/

10-14 01:26