zip(,)字符串浮动?

时间:2013-01-03 02:22:43

标签: python pandas time-series

我正在尝试计算每日P& L,以.csv的价格计算10分钟(每个日期有42次)---其中一天的购买数量和销售数量可能不相等。如果它们不相等,程序应使用该唯一日期的收盘价df [“price”] [t]减去(来自/来自),具体取决于它是买入还是卖出。

import pandas as pd

df=pd.read_csv("file.csv", names="date time price mag signal".split())

s=df["signal"]=="S"
b=df["signal"]=="B"
ns=df["signal"]!="S"
nb=df["signal"]!="B"
t=df["time"]=="1620"

a1=df["price"][buy|(nb & t)]
b1=df["date"][buy|(nb & t)]

h=df["price"][s|(ns & t)]
g=df["date"][s|(ns & t)]


c1=zip(b1,a1)
c=zip(g,h)

c1,c是包含购买和销售数量的列表,以及各自的日期。这里的问题是c1& c是字符串 - 一旦它们被压缩;因此无法减去。是否可以制作a1,h浮点数,以便我可以区分它们?

我希望匹配c,c1中的日期以减去Sells-Buys的价格:S_i-B_i,对于给定日期的所有i,然后对所有i求和,并为每个日期返回该值。我想区分h-a1的价格,只有当日期匹配时。

一些示例数据:

日期时间价格mag信号

1/3/2007 930 1422.8
1/3/2007 940 1423.2 0
1/3/2007 950 1422.8 0
1/3/2007 1000 1420.5 0
1/3/2007 1010 1422.8 0
1/3/2007 1020 1426.2 1 S

。 。

1/3/2007 1230 1424.2 -1 B

1/3/2007 1240 1424.8 0
1/3/2007 1250 1425.8 1 S

1/3/2007 1300 1426 0
1/3/2007 1310 1425 0
1/3/2007 1320 1423.5 -1 B

1/3/2007 1330 1421.8 0
1/3/2007 1340 1421.5 0
1/3/2007 1350 1420.5 0
1/3/2007 1400 1421 0
1/3/2007 1410 1417.2 -1 B

1/3/2007 1420 1412.8 -1 B

1/3/2007 1430 1414.8 0
1/3/2007 1440 1413.5 0
1/3/2007 1450 1410 0
1/3/2007 1500 1407.2 -1 B

1/3/2007 1510 1410.2 1 S

1/3/2007 1520 1409.5 -1 B

1/3/2007 1530 1410.5 1 S

1/3/2007 1540 1412.5 0
...

1/3/2007 1610 1415.5 1 S

1/3/2007 1620 1414 -1 B

1/4/2007 930 1412.2 0
1/4/2007 940 1411 0
1/4/2007 950 1413 0
1/4/2007 1000 1412.2 0
1/4/2007 1010 1407.2 -1 B

例如,c1的压缩结果应如下所示:

[('1/3/2007', '1424.2'),
('1/3/2007', '1423.5'),
('1/3/2007', '1417.2'),
('1/3/2007', '1412.8'),
('1/3/2007', '1407.2'),
('1/3/2007', '1409.5'),
('1/3/2007', '1414'),

 etc - all dates in between

 ('8/30/2012','1324')]

非常感谢。

1 个答案:

答案 0 :(得分:2)

不要使用zip,您可以将数据保存在pandas原生数据结构中 这里的价格应该在DataFrame中正确读取为浮点数。

您可以执行sub然后groupby 'date'

之类的操作
df['dif'] = a1.sub(h, fill_value=0)
g = df.groubpy('date')['dif'].sum()

请注意,您可以使用read_csv关键字parse_dates作为日期时间对象:

df = pd.read_csv("file.csv",
                 names="date time price mag signal".split()
                 parse_dates=[['date','time']])