python-2.7 – Superhuman Level – 由于重复,Pandas DataFrame
你喜欢只有超人可以解决的谜题吗?这是证明这种能力的最终测试.
一家公司可能会在不同时间从多家银行获得不同级别的资金(种子,a). 让我们看看数据然后是故事,以获得更好的画面. import pandas as pd data = {'id':[1,2,3,4],'company':['alpha','beta','alpha','alpha'],'bank':['z','x','y','z','j'],'rd': ['seed','seed','a','a'],'funding': [100,200,300,50],'date': ['2006-12-01','2004-09-01','2007-05-01','2007-09-01']} df = pd.DataFrame(data,columns = ['id','company','round','bank','funding','date']) df 产量: id company rd bank funding date 0 1 alpha seed z 100 2006-12-01 1 2 beta seed x 200 2004-09-01 2 2 beta seed y 200 2004-09-01 3 3 alpha a z 300 2007-05-01 4 4 alpha a j 50 2007-09-01 期望的输出: company bank_seed funding_seed date_seed bank_a funding_a date_a 0 alpha z 100 2006-12-01 [z,j] 350 2007-09-01 1 beta [x,y] 200 2004-09-01 None None None 正如你所看到的,我不是一个超人,而是试图解释我的思维过程. 我们来看看公司的alpha 公司阿尔法在2006年底首次从银行z获得100美元的种子资金.几个月后,他们的投资者对他们的进展感到非常满意,因此银行给了他们钱(300多美元!).然而,公司阿尔法需要更多的现金,但不得不去一些随机的瑞士银行j来保持活力.银行j不情愿地再给了50美元.好极了!他们现在从2007年9月结束的更新’a’回合中得到350美元. 公司测试版非常新.他们从两家不同的银行获得了总计200美元的资金.但是等等……这里没有什么关于他们的回合’a’.那没关系,我们现在就把None放进去,稍后再回来查看. 问题是公司的阿尔法很糟糕并从瑞士获得了资金…… import itertools unique_company = df.company.unique() df_indexed = df.set_index(['company','rd']) index = pd.MultiIndex.from_tuples(list(itertools.product(unique_company,list(df.rd.unique())))) reindexed = df_indexed.reindex(index,fill_value=0) reindexed = reindexed.unstack().applymap(lambda cell: 0 if '1970-01-01' in str(cell) else cell) working_df = pd.DataFrame(reindexed.iloc[:,reindexed.columns.get_level_values(0).isin(['company','funding'])].to_records()) 如果您知道如何解决部分问题,请继续将其放在下面.提前谢谢你花时间看看这个! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |