基于行记录创建分类列



我有一个具有这种特殊格式的文本文件

8493   RR44   
0.140064597       3.03221084E-02  0.332000017    
0.143124133       2.99523491E-02  0.333307326     
8493   RR47   
0.140064597       3.03221084E-02  0.332000017    
0.141788140       2.88347229E-02  0.332700878    

第一列、第二列和第三列为X、Y和Z记录,8493、RR44和RR47是代表事件和站点ID的记录的类别,每个类别可能有不同长度的记录。

我已经将我的文本文件加载到熊猫数据帧

ray = pd.read_csv('ray_test.txt',sep='t',header=None)
ray.columns = ['X','Y','Z']
print(ray.head)

结果很好,这是输出。

X         Y         Z
0   8493.000000      RR44       NaN
1      0.140065  3.03E-02  0.332000
2      0.143124  3.00E-02  0.333307
3  8493.000000      RR47       NaN
4      0.140065  3.03E-02  0.332000
5      0.141788  2.88E-02  0.332701

但我想以某种方式根据站点ID和事件来分组或创建一个数据类别,就像这个一样

X         Y         Z        Event    ID
0      0.140065  3.03E-02  0.332000  8493.000000  RR44 
1      0.143124  3.00E-02  0.333307  8493.000000  RR44 
2      0.140065  3.03E-02  0.332000  8493.000000  RR47 
3      0.141788  2.88E-02  0.332701  8493.000000  RR47 

但我不想循环整个记录,有没有办法将我的数据帧分组到所需的数据帧?任何形式的帮助都将不胜感激,谢谢。

一旦您有了dfray,您就可以遍历行并检查Z列是否为NaN。如果是,则将XY的值存储在后续行中,直到得到另一行Z等于NaN

for idx, row in ray.iterrows():
if pd.isnull(row['Z']):
event, id = row['X'], row['Y']
else:
ray.at[idx, 'event'] = event
ray.at[idx, 'id'] = id
ray = ray[ray['Z'].isnull()==False]
print(ray)

输出:

X       Y         Z   event    id
1  0.140065  0.0303  0.332000  8493.0  RR44
2  0.143124    0.03  0.333307  8493.0  RR44
4  0.140065  0.0303  0.332000  8493.0  RR47
5  0.141788  0.0288  0.332701  8493.0  RR47

请注意,对于事件和id列中所需的行,这在很大程度上假定Z列为null。让我知道这是否有效。

最新更新