-
Notifications
You must be signed in to change notification settings - Fork 0
/
db_create_from_to.py
56 lines (43 loc) · 1.32 KB
/
db_create_from_to.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!python
# create from and to field based on a single depth field
# keep_null_values: preserve -99 values in data
'''
usage: $0 input_path*csv,xlsx hid:input_path depth:input_path output*csv,xlsx keep_null_values@
'''
import sys, os.path
import numpy as np
import pandas as pd
# import modules from a pyz (zip) file with same name as scripts
sys.path.append(os.path.splitext(sys.argv[0])[0] + '.pyz')
from _gui import usage_gui, pd_load_dataframe, pd_save_dataframe
def pd_create_from_to(df, v_hid, v_depth, inplace=False):
v_from = 'from'
v_to = 'to'
if not inplace:
df = df.copy()
d_depth = 0
d_hid = None
a_from = df[v_depth].copy()
df[v_to] = df[v_depth].copy()
for i,row in df.iterrows():
if row[v_hid] != d_hid:
a_from[i] = 0
d_hid = row[v_hid]
else:
a_from[i] = d_depth
d_depth = row[v_depth]
df[v_from] = a_from
return df
# main
def db_create_from_to(input_path, v_hid, v_depth, output, keep_null_values):
df = pd_load_dataframe(input_path)
pd_create_from_to(df, v_hid, v_depth, True)
if not int(keep_null_values):
df.fillna(-99, inplace=True)
if output:
pd_save_dataframe(df, output)
else:
print(df.to_string(index=False))
main = db_create_from_to
if __name__=="__main__":
usage_gui(__doc__)