在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方法,但没有成功。数据以所需格式显示后,还需要对新组织的数据进行其他计算,但以所需格式获取数据是关键。
答案 0 :(得分:2)
这更像是通过使用diff
和cumsum
创建附加键之后的枢轴问题,所以我正在使用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]