2017-06-22 22 views
0

我有一個包含數據的csv文件,我有一個包含正值和負值的列,我需要以某種方式繪製該列的平均值2個小節,一個用於負值,另一個用於正值。 拿上我的數據看:大熊貓從一個csv文件的正負值的條形圖的陰謀圖

timestamp,heure,lat,lon,ampl,type 
2006-01-01 00:00:00,13:58:43,33.837,-9.205,10.3,1 
2006-01-02 00:00:00,00:07:28,34.5293,-10.2384,17.7,1 
2007-02-01 00:00:00,23:01:03,35.0617,-1.435,-17.1,2 
2007-02-02 00:00:00,01:14:29,36.5685,0.9043,36.8,1 
.... 
2011-12-31 00:00:00,05:03:51,34.1919,-12.5061,-48.9,1 

我使用這個代碼繪製我的數據:

names =["timestamp","heure","lat","lon","ampl","type"] 
data = pd.read_csv('flash.txt',names=names, parse_dates=['timestamp'],index_col=['timestamp'], dayfirst=True) 
data['ampl'] = data['ampl'].abs() 
yearly = data.groupby(data.index.month)['ampl'].count() 
ax = yearly.plot(kind='bar') 

所以,我需要撇清有問題的列的值,並有2條代替一,我該怎麼辦?

+0

沒有數據實在是有點問題的,但如果改變'年度= data.groupby(數據count()''ampl']。count()'to'annual = data.groupby([data.index.month,'type'])['ampl']。count()。unstack(fill_value)它應該工作。 – jezrael

+0

如果它不起作用,您可以添加4-5行樣本數據嗎? – jezrael

+0

我剛剛編輯我的問題,你可以看看我的數據現在 –

回答

1

首先通過numpy.signmap通過dict創建新列sign

然後通過size添加新的列名groupby,骨料和重塑通過unstack

data['sign'] = np.sign(data['ampl']).map({1:'+', -1:'-', 0:'0'}) 
data['ampl'] = data['ampl'].abs() 
yearly = data.groupby([data.index.month, 'sign'])['ampl'].size().unstack() 
yearly.plot(kind='bar') 

What is the difference between size and count in pandas?

+0

我照你說的做了,我得到了這個:KeyError:'type' –

+0

什麼是'print(df.columns.tolist())'? – jezrael

+0

它給出了這個:['heure','lat','lon','ampl'] –