将多个列合并到同一数据帧pandas

时间:2017-02-25 19:23:17

标签: python pandas

我有一个像这样的pandas数据框:

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               

我想将所有Wind Dir列组合成一个Wind Dir(deg)列以及所有Wind Speed列到单个Wind Speed(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可能有用,但我认为我没有使用我的例子正确实现它。有人能指出我正确的方向吗?谢谢!

1 个答案:

答案 0 :(得分: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()