Python 基于行记录创建分类列
我有一个特殊格式的文本文件Python 基于行记录创建分类列,python,pandas,Python,Pandas,我有一个特殊格式的文本文件 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
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
但我不想在整个记录上循环,有没有办法将我的数据帧分组到所需的数据帧?感谢您的任何帮助。一旦您有了df
射线
,您就可以在行中循环,并检查Z
列是否为NaN
。如果是,则在后续行中存储X
和Y
的值,直到获得另一行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
请注意,这严重地假设
Z
列对于事件和id列中所需的行为空。让我知道这是否有效 它们都是由两行数据分隔的。我不这么认为,因为每个站点可能记录不同长度的数据,所以我只取了数据的一小部分data@azharharisandi您想根据什么标准来标识不同的行集?很抱歉我不活动,我感谢您的回答。我已经用与您相同的逻辑解决了这个问题,但是使用了更混乱的代码,您的代码显然更可读,非常感谢!很高兴这有帮助