【发布时间】:2017-03-29 08:07:53
【问题描述】:
我的 grep 命令输出如下。
grep -r GFD . | cut -d: -f2
out_GFD_994 NSE_FO_BHP_1703 -9425 6800 361.45 11900 359.96 5100 0.34% 6137085.0 -15.36
out_GFD_994 NSE_FO_BHP_1704 15651 -6800 360.38 6800 362.04 13600 26.66% 7374430.0 21.22
out_GFD_994 NSE_FO_TLS_1703 -4996 2000 603.57 5000 602.68 3000 0.46% 4825900.0 -10.35
out_GFD_994 NSE_FO_TLS_1704 4480 -2000 605.71 3000 606.44 5000 29.62% 4849350.0 9.24
out_GFD_994 NSE_FO_MQG_1703 -11717 -20000 148.64 50000 148.64 70000 0.46% 17837250.0 -6.57
out_GFD_994 NSE_FO_MQG_1704 17213 20000 149.29 75000 149.39 55000 36.11% 19413500.0 8.87
out_GFD_Part2 NSE_FO_BHP_1703 -17597 -20000 0 0 39.25 20000 0.07% 785000.0 -224.17
out_GFD_Part2 NSE_FO_BHP_1704 14481 20000 39.6 20000 0 0 1.38% 792000.0 182.84
out_GFD_Part2 NSE_FO_TLS_1703 28312 1200 643.93 16800 645.52 15600 0.54% 20888220.0 13.55
out_GFD_Part2 NSE_FO_TLS_1704 -23813 -1200 647.91 16800 646.87 18000 34.11% 22528620.0 -10.57
out_GFD_Part2 NSE_FO_MQG_1703 -133456 8800 1029.33 25300 1025.86 16500 0.55% 42968915.0 -31.06 unhedged
out_GFD_Part2 NSE_FO_MQG_1704 141534 -7700 1031.26 33000 1033.85 40700 49.62% 76109605.0 18.60
我需要根据第 2 列值作为键进行清除/合并/取消堆叠(无论哪个词听起来都合适)。 使输出数据转换为(对应值的总和)
out_GFD_994 out_GFD_Part2 NSE_FO_BHP_1703 -9425-17597 6800-20000 361.45 11900 359.96 5100 0.34% 6137085.0 -15.36
out_GFD_994 out_GFD_Part2 NSE_FO_BHP_1704 15651+14481 -6800+20000 360.38 6800 362.04 13600 26.66% 7374430.0 21.22
out_GFD_994 out_GFD_Part2 NSE_FO_TLS_1703 -4996+28312 2000+1200 603.57 5000 602.68 3000 0.46% 4825900.0 -10.35
out_GFD_994 out_GFD_Part2 NSE_FO_TLS_1704 4480-23813 -2000-1200 605.71 3000 606.44 5000 29.62% 4849350.0 9.24
out_GFD_994 out_GFD_Part2 NSE_FO_MQG_1703 -11717-133456 -20000+8800 148.64 50000 148.64 70000 0.46% 17837250.0 -6.57
out_GFD_994 out_GFD_Part2 NSE_FO_MQG_1704 17213+141534 20000-7700 149.29 75000 149.39 55000 36.11% 19413500.0 8.87
(only 2 columns shown in expected output format)
如果这为解决此问题铺平了道路,我可以为列命名并将其加载为 pandas 数据框。
更新 1:
我现在只处理 5 列,并将其加载到我的 pandas 数据框中,如下所示
>>> df
grep_string key val1 val2 val3
0 out_GFD_994 NSE_FO_BHP_1703 -9425 6800 361.45
1 out_GFD_994 NSE_FO_BHP_1704 15651 -6800 360.38
2 out_GFD_994 NSE_FO_TLS_1703 -4996 2000 603.57
3 out_GFD_994 NSE_FO_TLS_1704 4480 -2000 605.71
4 out_GFD_994 NSE_FO_MQG_1703 -11717 -20000 148.64
5 out_GFD_994 NSE_FO_MQG_1704 17213 20000 149.29
6 out_GFD_Part2 NSE_FO_BHP_1703 -17597 -20000 0.00
7 out_GFD_Part2 NSE_FO_BHP_1704 14481 20000 39.60
8 out_GFD_Part2 NSE_FO_TLS_1703 28312 1200 643.93
9 out_GFD_Part2 NSE_FO_TLS_1704 -23813 -1200 647.91
10 out_GFD_Part2 NSE_FO_MQG_1703 -133456 8800 1029.33
11 out_GFD_Part2 NSE_FO_MQG_1704 141534 -7700 1031.26
如何使用键列进行(求和)合并
更新 2:
汇总的列值将添加到日志文件中,如下所示:
NSE_FO_BHP_1703_MAXLONGPOS = 200000
NSE_FO_BHP_1703_MAXSHORTPOS = 200000
NSE_FO_BHP_1703_MAXLONGEXPOSURE = 250000
NSE_FO_BHP_1703_MAXSHORTEXPOSURE = 250000
NSE_FO_BHP_1704_MAXLONGPOS = 200000
NSE_FO_BHP_1704_MAXSHORTPOS = 200000
NSE_FO_BHP_1704_MAXLONGEXPOSURE = 250000
NSE_FO_BHP_1704_MAXSHORTEXPOSURE = 250000
NSE_FO_TLS_1703_MAXLONGPOS = 100000
NSE_FO_TLS_1703_MAXSHORTPOS = 100000
NSE_FO_TLS_1703_MAXLONGEXPOSURE = 200000
NSE_FO_TLS_1703_MAXSHORTEXPOSURE = 200000
NSE_FO_TLS_1704_MAXLONGPOS = 100000
NSE_FO_TLS_1704_MAXSHORTPOS = 100000
NSE_FO_TLS_1704_MAXLONGEXPOSURE = 200000
NSE_FO_TLS_1704_MAXSHORTEXPOSURE = 200000
NSE_FO_MQG_1703_MAXLONGPOS = 300000
NSE_FO_MQG_1703_MAXSHORTPOS = 300000
NSE_FO_MQG_1703_MAXLONGEXPOSURE = 400000
NSE_FO_MQG_1703_MAXSHORTEXPOSURE = 400000
NSE_FO_DEF_1704_MAXLONGPOS = 300000
NSE_FO_MQG_1704_MAXSHORTPOS = 300000
NSE_FO_MQG_1704_MAXLONGEXPOSURE = 400000
NSE_FO_MQG_1704_MAXSHORTEXPOSURE = 400000
我们能否通过将其映射到子字符串来添加我们在 df(例如列 d )中获得的总和输出值,以将其添加/减去到上述文件中。例如,我们在 d 列中得到 -13200。我们有NSE_FO_BHP_1703_MAXLONGPOS = 200000。在 a 文件中,将其更改为 213200 并更改 NSE_FO_BHP_1703_MAXSHORTPOS to 186800。更改MAXLONGEXPOSURE and MAXSHORTEXPOSURE to 263200 and 236800。
【问题讨论】:
-
我看到第 8 列是
%。是否需要删除它,求和然后再次添加? -
感谢 jezrael,现在我们可以忽略该列。
-
好的,我从 dict 中删除它。解决方案已编辑。
-
你是如何将标题添加为 0,1,2... 的?我手动编辑了带有标题名称的 csv
-
我使用
read_csv和参数header=None