我几天前就在处理这个问题,但我找不到答案。希望您能够帮助我。
这是我的数据框:
Date Attribute Quantity
0 2017-12-14 large -39
0 2017-12-15 large -80
1 2017-12-15 large -30
2 2017-12-14 short -15
2 2017-12-15 short -100
4 2017-12-15 short -10
1 2017-12-15 short 20
3 2017-12-15 short 60
3 2017-12-15 big 80
5 2017-12-15 big 104
我想做什么?我想为每个Attribute
tem计算XIRR。为此,我需要Date
和Quantity
(作为数组),但需要基于第二列中列出的每个Attribute
项。例如,给定large
,我想为Dates
提取quantities
和large
(作为数组)。
鉴于此,我认为我最好的选择是基于Attibute
列创建特定的数组,然后执行上述功能(如果你考虑另一种解决这个问题的方法,请告诉我)。所以,我生成了一个产生
df1= df[['Date','Quantity']].as_matrix()
[[Timestamp('2017-12-14 00:00:00') -39]
[Timestamp('2017-12-15 00:00:00') -80]
[Timestamp('2017-12-15 00:00:00') -30]
[Timestamp('2017-12-14 00:00:00') -15]
[Timestamp('2017-12-15 00:00:00') -100]
[Timestamp('2017-12-15 00:00:00') -10]
[Timestamp('2017-12-15 00:00:00') -20]
[Timestamp('2017-12-15 00:00:00') 60]
[Timestamp('2017-12-15 00:00:00') -80]
[Timestamp('2017-12-15 00:00:00') 104]]
正如您所看到的,此数组包含所有属性,但我希望根据For / each
列中的每个属性获得类似Attribute
函数的内容。我怎样才能做到这一点? 这是我最终目标的最佳方法/替代方案吗?
任何帮助都将受到高度赞赏。
PD:我应该提到我想要使用的函数作为一个组工作在属性上(因为它一起需要日期和数量)。它的工作方式与gruopby
类似。
由于
答案 0 :(得分:1)
考虑将函数应用于DataFrame的每一行:
def row_func(row):
if row['Atribute'] == 'large':
return row['quantity']
etc...
df['new_column'] = df.apply(row_func, axis=1)