2017-12-27 1099 views
1

我前几天正在处理这个问题,但是我找不到答案。希望您能够帮助我。从一个数据框中创建一个以一列值为参考的数组

这是我的数据框:

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系统计算XIRR。为此,我需要DateQuantity(作为数组),但是基于第二列中列出的每个Attribute项目。例如,给出large,我想为large提取Datesquantities(作为数组)。

鉴于此,我认为我的最佳选择是基于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]] 

正如你可以看到这个阵列包括所有的属性,但我想根据Attribute列各attibute要达到这样的For/each功能。我怎样才能做到这一点? 这是我最终目标的最佳方法吗?

任何帮助将不胜感激。

PD:我应该提一下,我想使用属性作为一个组的作品(因为它需要日期和数量,所有的一起)。它的工作原理类似于gruopby

感谢

+1

您可以将功能行作为系列。 'df.apply(some_function,axis = 1)' –

+0

不,我认为这不是一个好主意。我不同意发布的答案,'apply'是你应该看的最后一个解决方案。请告诉我你想做什么。你很可能需要一个groupby +的东西(我不知道是什么,因为你没有告诉我你想做什么......现在你知道为什么解释你的问题是重要的)。 –

回答

1

考虑将函数应用于数据帧中的每一行:

def row_func(row): 
    if row['Atribute'] == 'large': 
     return row['quantity'] 
    etc... 

df['new_column'] = df.apply(row_func, axis=1) 
相关问题