删除 NaN 并进行 groupby 并将第一列中的每个 ID 导出到一个 txt 文件

Drop NaN and make groupby and export each ID in the first column to a txt file

我有这个 df:

        ID         COL1    COL2  COL3
0   ZBC174         TYPE     4.0   NaN
1      NaN           ID  ZBC174   NaN
2      NaN         ROW1      50   NaN
3      NaN         ROW2       0   NaN
4      NaN         ROW3       0   NaN
5      NaN         ROW4       2   NaN
6      NaN        75.00   -2.45   1.0
7      NaN       115.50   -1.73   1.0
8      NaN         ROW7       0   NaN
9      NaN         ROW8   4.034   NaN
10     NaN         ROW9       8   NaN
11     NaN  115.4999712   -1.73   0.7
12     NaN   122.000571   -0.17   0.7
13     NaN  126.9999986  -0.118   0.9
14     NaN  129.5000362   0.466   0.9
15     NaN  134.4994643   1.757   1.0
16     NaN  140.0004388   1.994   1.0
17     NaN  145.5000039   3.339   1.0
18     NaN  148.3417866   4.034   1.0
19     NaN          NaN     NaN   NaN
20  ZBC173         TYPE     4.0   NaN
21     NaN           ID  ZBC173   NaN
22     NaN         ROW1  51.977   NaN
23     NaN         ROW2       0   NaN
24     NaN         ROW3       0   NaN
25     NaN         ROW4       2   NaN
26     NaN        81.00   -4.42   1.0
27     NaN       114.00   -1.67   1.0
28     NaN         ROW7       0   NaN
29     NaN         ROW8   3.696   NaN
30     NaN         ROW9       7   NaN
31     NaN  113.9996969   -1.67   0.7
32     NaN   121.500409       0   0.7
33     NaN  127.9995187   0.066   0.9
34     NaN  129.4998186   0.285   0.9
35     NaN  134.4992436   1.779   1.0
36     NaN  145.9999685   2.144   1.0
37     NaN  153.2586833   3.696   1.0

我希望第一列中的每个 ID 有 2 个 txt 文件:

 ZBC173.txt and  ZBC174.txt

预期输出为一个 txt 文件 (ZBC174.txt) :

TYPE    4.0                     
ID  ZBC174  

ROW1    50  

ROW2    0   
ROW3    0   

ROW4    2   
75.000   -2.450 1.00
115.500  -1.730 1.00

ROW7    0   
ROW8    4.03    
ROW9    8   
115.500  -1.730 0.700
122.000  -0.170 0.700
127.000  -0.120 0.900
129.500  0.470  0.900
134.500  1.760  1.000
140.000  1.990  1.000
145.500  3.340  1.000
148.340  4.030  1.000

我的代码:

import os
import csv
import pandas as pd
import numpy as np


df = pd.read_csv(r'C:\Users\mycsv.csv', sep= ';')

df = df.dropna(subset=['COL2'])
df = df.groupby('ID', as_index=False).nth(0,dropna=False)

print df

我的代码输出是:

        ID  COL1    COL2  COL3
0   ZBC174  TYPE     4.0   NaN
1      NaN    ID  ZBC174   NaN
20  ZBC173  TYPE     4.0   NaN

如果我不清楚我的问题,请告诉我。我是编码初学者。感谢您的理解。

你可以试试:

folder = your folder path

for _,g in df.groupby(df['ID'].notna().cumsum()):
    g.iloc[:,1:].dropna(how='all').to_csv(f"{folder}\{g.iloc[0,0]}.txt",index=False)

我得到的输出: