私は2列(時間と圧力)のデータフレームを持っています。df.value.apply NaNを返します
timestep value
0 393
1 389
2 402
3 408
4 413
5 463
6 471
7 488
8 422
9 404
10 370
私が最初に各圧力値の周波数を見つけ、それらを正常に動作しますdf['freq_rank']
をランク付けする必要がありますが、私は間隔の違いを見つける&カウント値に対して列を比較することによって、データフレームを隠蔽しようとしていたとき、私は取得していますNaNはprint(x)
が右出力を返し、print(df['freq'])
がNaNを返す理由
import numpy as np
import pandas as pd
from matplotlib.pylab import *
import re
import pylab
from pylab import *
import datetime
from scipy import stats
import matplotlib.pyplot
df = pd.read_csv('copy.csv')
dataset = np.loadtxt(df, delimiter=";")
df.columns = ["Timestamp", "Pressure"]
## Timestep as int
df = pd.DataFrame({'timestep':np.arange(3284), 'value': df.Pressure})
## Rank of the frequency of each value in the df
vcs = {v: i for i, v in enumerate(df.value.value_counts().index)}
df['freq_rank'] = df.value.apply(vcs.get)
print(df.freq_rank)
>>Output:
>>0 131
>>1 235
>>2 99
>>3 99
>>4 101
>>5 101
>>6 131
>>7 79
>>8 79
## Find most frequent value
count = df['value'].value_counts().sort_values(ascending=[False]).nlargest(10).index.values[0]
## Mask the DF by comparing the column against count value & find interval diff.
x = df.loc[df['value'] == count, 'timestep'].diff()
print(x)
>>Output:
>>50 1.0
>>112 62.0
>>215 103.0
>>265 50.0
>>276 11.0
>>277 1.0
>>278 1.0
>>318 40.0
>>366 48.0
>>367 1.0
>>368 1.0
>>372 4.0
df['freq'] = df.value.apply(x.get)
print(df.freq)
>>Output:
>>0 NaN
>>1 NaN
>>2 NaN
>>3 NaN
>>4 NaN
>>5 NaN
>>6 NaN
>>7 NaN
>>8 NaN
私は理解していない...結果。
私はあなただけちょうどあなたができる新しい列df['freq']
に
x
をコピーしたい場合は、あなたの問題は、最後の文
df['freq'] = df.value.apply(x.get)
であると思い
[mcve](http://stackoverflow.com/help/mcve)を作成できますか? [良い再現性のあるパンダの例を作成する方法]を参照してください。(http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples) –
さらに詳しい情報はありますか?私は私のデータフレームも含めました。 – joasa