私はxで単調なパンダデータフレームを作るための高速な方法を探しています。pandas.Seriesを単調にする簡単な方法はありますか?
def make_monotonic(df, cols=None):
"""make df monotonic"""
if not cols:
cols = df.columns
mycol = "_maximum"
dfm = df.copy()
for col in cols:
dfm[mycol] = np.maximum.accumulate(dfm[col])
dfm.drop_duplicates([mycol], keep="first", inplace=True)
del dfm[mycol]
return dfm
n=21
np.random.seed(21)
x = np.linspace(0,np.pi,n)
dx = .5 * (np.random.random(n)-.5)
df = pd.DataFrame.from_dict({"x0":x, "x":x+dx, "y":np.sin(x)})
dfm = make_monotonic(df, cols=["x"])
Make colum x monotonic in "x" Make colum x monotonic in "x"
は、I(x)は
x x0 y
0 -0.676913 0.000000 0.000000e+00
1 -0.002176 0.314159 3.090170e-01
2 0.959768 0.628319 5.877853e-01
3 0.224902 0.942478 8.090170e-01
4 0.815521 1.256637 9.510565e-01
5 0.896956 1.570796 1.000000e+00
6 1.588363 1.884956 9.510565e-01
7 2.444980 2.199115 8.090170e-01
8 2.225446 2.513274 5.877853e-01
9 2.952820 2.827433 3.090170e-01
10 2.495949 3.141593 1.224647e-16
x x0 y
0 -0.676913 0.000000 0.000000
1 -0.002176 0.314159 0.309017
2 0.959768 0.628319 0.587785
6 1.588363 1.884956 0.951057
7 2.444980 2.199115 0.809017
9 2.952820 2.827433 0.309017
に関数y = Fを生成したい:
私の現在のソリューションは、以下のとおりです。
シリーズが単調に単調であるとはどういう意味ですか? –
"単調なx"は、各行のx値が常に前の行のx値より大きくなるようにすることを意味します。 – steller
データを並べ替えるだけでいいのですか? –