2016-12-09 2 views
0

2 개의 열 (시간과 압력)이있는 데이터 프레임이 있습니다.df.value.apply returns 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'] 순위를해야하지만 나는 간격 차이를 찾을 & 카운트 값에 대해 열을 비교하여 dataframe 마스크하려고 할 때, 나는 무엇입니까 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 

이해가 안 ... 발생합니다.

+1

[mcve] (http://stackoverflow.com/help/mcve)를 만들 수 있습니까? [재현성이 좋은 팬더 예제를 만드는 방법]을 참조하십시오. (http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples) –

+0

추가 정보가 필요합니까? 내 데이터 프레임도 포함 시켰습니다. – joasa

답변

1

나는 당신의 문제는 마지막 문장 df['freq'] = df.value.apply(x.get)

방금 ​​새 열로 x을 복사 할 경우로 생각 df['freq'] 당신은 할 수 있습니다

df['freq'] = x

그런 다음 print(df.freq) 당신에게 줄 것이다 print(x) 문과 동일한 결과가 나타납니다.


업데이트는 : 귀하의 문제는 모든 인덱스와 함께입니다. df에는 0-10의 인덱스 값만 있습니다. x에는 50, 112, 215가 있습니다. df에 할당 할 때 기존 인덱스가있는 값만 추가됩니다.

+0

나는 그것을 시도했다. 'print (df)'또는'print (df.freq)'를 시도 할 때''df [ 'freq'] = x''을 수행하더라도 여전히 NaN 값을 볼 수 있습니다. – joasa

+0

'print (x)'는 무엇을 제공합니까? – wonderkid2

+0

질문에 – joasa