【发布时间】:2019-10-03 17:33:15
【问题描述】:
我有一个多索引数据框。索引由 ID 和日期表示。我的 3 列是成本、收入和支出。
我想根据特定条件创建 3 个新列。
1) 我要创建的第一个新列将基于条件,对于每个 ID 的 3 个最近的日期,如果成本列持续减少,则将新行值标记为“NEG”,如果不是,则将其标记为“不”。
2) 我要创建的第二列将基于条件,对于最近的 3 个日期,如果收入列持续减少,则将新行值标记为“NEG”,否则将其标记为“不'。
3) 我要创建的第三列将基于条件,对于最近的 3 个日期,如果支出列持续增加,则将新行值标记为“POS”或保持相同的标签新行值为“STABLE”。
idx = pd.MultiIndex.from_product([['001', '002', '003','004'],
['2017-06-30', '2017-12-31', '2018-06-30','2018-12-31','2019-06-30']],
names=['ID', 'Date'])
col = ['Cost', 'Revenue','Expenditure']
dict2 = {'Cost':[12,6,-2,-10,-16,-10,14,12,6,7,4,2,1,4,-4,5,7,9,8,1],
'Revenue':[14,13,2,1,-6,-10,14,12,6,7,4,2,1,4,-4,5,7,9,18,91],
'Expenditure':[17,196,20,1,-6,-10,14,12,6,7,4,2,1,4,-4,5,7,9,18,18]}
df = pd.DataFrame(dict2,idx,col)
我曾尝试创建一个函数,然后将其应用于我的 DF,但我不断收到错误...
我想最终得到的解决方案看起来像这样..
idx = pd.MultiIndex.from_product([['001', '002', '003','004'],
['2017-06-30', '2017-12-31', '2018-06-30','2018-12-31','2019-06-30']],
names=['ID', 'Date'])
col = ['Cost', 'Revenue','Expenditure', 'Cost Outlook', 'Revenue Outlook', 'Expenditure Outlook']
dict3= {'Cost': [12,6,-2,-10,-16,
-10,14,12,6,7,
4,2,1,4,-4,
5,7,9,8,1],
'Cost Outlook': ['no','no','NEG','NEG','NEG',
'no','no','no','NEG','NEG',
'no','no','NEG','no','no',
'no','no','no','no','NEG'],
'Revenue':[14,13,2,1,-6,
-10,14,12,6,7,
4,2,1,4,-4,
5,7,9,18,91],
'Revenue Outlook': ['no','no','NEG','NEG','NEG',
'no','no','no','NEG','NEG',
'no','no','NEG','no','no',
'no','no','no','no','no'],
'Expenditure':[17,196,1220,1220, -6,
-10,14,120,126,129,
4,2,1,4,-4,
5,7,9,18,18],
'Expenditure Outlook':['no','no','POS','POS','no',
'no','no','POS','POS','POS',
'no','no','no','no','no',
'no','no','POS','POS','STABLE']
}
df_new = pd.DataFrame(dict3,idx,col)
【问题讨论】:
-
当最近 3 个月为
196, 1220, 1220时,2018-12-31中的Expenditure如何稳定?你说基于 3 个月,但只有最近 2 个月是相等的。 -
你说得对,让我编辑
标签: python-3.x pandas dataframe multi-index