【发布时间】:2018-05-31 15:09:09
【问题描述】:
我有一个数据框,sega_df:
Month 2016-11-01 2016-12-01
Character
Sonic 12.0 3.0
Shadow 5.0 23.0
我想创建多个新列,方法是为我的数据框中的每个现有列应用一个公式(简而言之,列数几乎翻倍)。该公式是(100 - [5*eachcell])*0.2。
例如,Sonic 的 11 月,(100-[5*12.0])*0.2 = 8.0,Sonic 的 12 月,(100-[5*3.0])*0.2 = 17.0 我的理想输出是:
Month 2016-11-01 2016-12-01 Weighted_2016-11-01 Weighted_2016-12-01
Character
Sonic 12.0 3.0 8.0 17.0
Shadow 5.0 23.0 15.0 -3.0
我知道如何创建一个 for 循环来创建一列。如果只考虑 一个 个月:
for w in range(1,len(sega_df.index)):
sega_df['Weighted'] = (100 - 5*sega_df)*0.2
sega_df[sega_df < 0] = 0
我还没有获得创建多个列的技能或经验。我一直在寻找其他可能回答我到底在做什么但还没有任何工作的问题。提前致谢。
【问题讨论】:
-
很好奇,你为什么要处理宽数据?在这里,日期应该是它自己的列,其值与其相邻。对于广泛的数据集,计算和争论非常困难。重塑为长格式,在没有循环的情况下运行所需的聚合,生活更轻松。
-
@Parfait 我之前在阅读 excel 表后应用了
.sum()和.groupby()。我的原始 Excel 表每个月每个字符都有多个条目,所以是的,日期之前有自己的列,并且我想将行数减少到唯一字符的数量。这样我就可以逐月查看趋势,只是为了我自己的兴趣。我只复制了前两个月和前两个字符以保持我的帖子简短。希望这可以澄清它。 -
宽格式通常用于最终用途报告需求,应该是最后一步。再次,从 Excel 导入,使用
melt重塑为长格式,然后运行您的聚合/计算。无需循环或维护许多列。
标签: python pandas for-loop dataframe