根据两列中的值重塑熊猫数据框

时间:2019-04-01 15:03:59

标签: python-3.x pandas dataframe

在Python中,我想用两个可能的路径搜索数据帧中的所有行(数据帧是从csv文件填充的)。如果给定行的“组”列为零,请使用“通道_1”和“数据_1”列将该行的数据移动到新数据框的下一行。如果给定行的“组”列非零,则使用相同的“组”列值(也由“子组”列标识为1、2或3)获得所有三行,然后添加到下一行新数据框的行。

从csv文件生成数据帧的代码:

for name in glob.glob(search_string):
    r_file = pd.read_csv(name)

当前数据格式:

Channel_Num    Group    Sub_Group    Data
1000            1        1            100
1001            1        2            105
1002            1        3            110
1003            0        0            200
1004            2        1            400
1005            2        2            405
1006            2        3            410
1007            0        0            500

所需数据格式:

Group    Channel_1    Data_1    Channel_2   Data_2   Channel_3   Data_3
1         1000         100       1001        105      1002        110
0         1003         200       NaN         NaN      NaN         NaN   
2         1004         400       1005        405      1006        410
0         1007         500       NaN         NaN      NaN         NaN

我尝试了GroupBy和ivot_table方法,但没有成功。数据以所需格式显示后,还需要对新组织的数据进行其他计算,但以所需格式获取数据是关键。

1 个答案:

答案 0 :(得分:2)

这更像是通过使用diffcumsum创建附加键之后的枢轴问题,所以我正在使用pivot_table和多列展平

df.loc[df.Sub_Group==0,'Sub_Group']=1
df['newkey']=df.Group.diff().ne(0).cumsum()
s=df.pivot_table(index=['Group','newkey'],columns=['Sub_Group'],values=['Channel_Num','Data'],aggfunc='first').sort_index(level=1,axis=1)
s.columns=s.columns.map('{0[0]}_{0[1]}'.format) 
s.reset_index(level=0).sort_index()
Out[25]: 
        Group  Channel_Num_1  Data_1   ...    Data_2  Channel_Num_3  Data_3
newkey                                 ...                                 
1           1         1000.0   100.0   ...     105.0         1002.0   110.0
2           0         1003.0   200.0   ...       NaN            NaN     NaN
3           2         1004.0   400.0   ...     405.0         1006.0   410.0
4           0         1007.0   500.0   ...       NaN            NaN     NaN
[4 rows x 7 columns]