2017-02-25 79 views
2

我有一個熊貓的數據幀,看起來像這樣:將多個列合併到一列在同一個數據幀熊貓

Time (min) 20m Wind Speed (m/s) Wind Dir (deg)  40m Wind Speed (m/s)  Wind Dir (deg).1 60m Wind Speed (m/s) 60m Wind Dir (deg) 
     1.0   1.5      120.4      2.5    133.2     3.5     190.5    

我想所有的風向列合併成一個單一的風向(度)列以及所有的風速列到一個單一的風速(m/s)欄,使數據幀將如下所示:

Time (min)  Wind Speed (m/s)   Wind Dir (deg)                                       
     1.0     1.5     120.4      
     NAN     2.5     133.2 
     NAN     3.5     190.5 

我看着合併,連接,並連接但這些似乎是將不同的數據幀組合在一起。我認爲,也許pd.melt或append可能工作,但我不認爲我正在使用我的例子正確實施它。有人能指引我朝着正確的方向嗎?謝謝!

回答

0

所以我只是複製並粘貼你的第一個代碼塊並將其保存爲test.ssv。你與pd.melt在正確的軌道上。

# Python 2.7.12 and pandas 0.19.2 
import pandas as pd 

df = pd.read_csv('~/Desktop/test.ssv', sep='\s\s+') 

wind_speed_df = pd.melt(
    df, value_vars=['20m Wind Speed (m/s)', '40m Wind Speed (m/s)', '60m Wind Speed (m/s)']) 
wind_dir_df = pd.melt(
    df, value_vars=['Wind Dir (deg)', 'Wind Dir (deg).1', '60m Wind Dir (deg)']) 
wind_speed_df.reset_index(inplace=True, drop=True) 
wind_dir_df.reset_index(inplace=True, drop=True) 
wind_dir_df = wind_dir_df.rename(columns={'value': 'Wind Speed (m/s)'}) 
wind_speed_df = wind_speed_df.rename(columns={'value': 'Wind Dir (deg)'}) 
new_df = wind_speed_df.merge(wind_dir_df, right_index=True, left_index=True) 
new_df.drop(['variable_x', 'variable_y'], inplace=True, axis=1) 
new_df['Time (min)'] = df['Time (min)'].repeat(3).reset_index(drop=True) 

print new_df.head() 
+0

這一切似乎工作,除了最後一次呼籲在時間('分鐘')列加回來。它給了我一個ValueError:不能從重複軸重新索引。我也想知道是否有辦法輕鬆做同樣的事情,但使用索引的情況下列名可能會改變 – user1332577

+0

是的索引是[0,0,0]因爲重複,必須添加在一個。下降。 – wordsforthewise

+0

我想你可以做一個函數,並使用.apply(lambda x:func(x)) – wordsforthewise