【问题标题】:groupby by years and generate new columns按年份分组并生成新列
【发布时间】:2015-11-28 08:15:26
【问题描述】:

假设我有以下关于过去完成的交易数量的信息,我按年份对它们进行分组:

import pandas as pd
import numpy as np

dates = pd.date_range('19990101', periods=6000)
df = pd.DataFrame(np.random.randint(0,50,size=(6000,2)), index = dates)
df.columns = ['winners','losers']
grouped = df.groupby(lambda x: x.year)
print grouped.sum()

如何在这个“分组”数据中生成一列来显示每年的获胜者百分比?以及显示每年最大连续亏损交易的另一列?

正在尝试遵循此示例Understanding groupby in pandas,但在我的情况下无法弄清楚如何按年进行。

【问题讨论】:

  • 当您说赢家百分比时,您是指#winners/total trades 吗?每年最大连续亏损交易,您是否尝试滚动亏损总和直到您达到零?使用一组简单的数据显示所需的输出可能会有所帮助。
  • 嗨,是的。抱歉不清楚。获胜者百分比 = #winners/总交易量。假设每个日期显示在该日期完成的亏损交易数量。例如,如果我们有以下失败者:02jan2000 = 1, 03jan2000 = 4, 04jan2000 = 0, 05jan2000=15 那么 2000 年的最大“连续失败者”仍然是 5。

标签: python pandas


【解决方案1】:

首先新建一个DataFrame,然后根据胜负创建必要的列:

new_df = pd.DataFrame()
new_df ['winners'] = df.groupby(df.index.year, as_index=True)['winners'].sum()
new_df ['losers'] = df.groupby(df.index.year, as_index=True)['losers'].sum()

然后,您可以按赢家、输家(返回类似索引数据)进行汇总,以计算赢家、输家的百分比。

你可以这样做:

import pandas as pd
import numpy as np

dates = pd.date_range('19990101', periods=6000)
df = pd.DataFrame( np.random.randint(0,50,size=(6000,2)), index = dates)
df.columns = ['winners','losers']
new_df = pd.DataFrame()
new_df ['winners'] = df.groupby(df.index.year, as_index=True)['winners'].sum()
new_df ['losers'] = df.groupby(df.index.year, as_index=True)['losers'].sum()
new_df['winners_Percent'] = new_df['winners']/new_df['winners'].sum()
new_df['losers_Percent'] = new_df['losers']/new_df['losers'].sum()

输出:

【讨论】:

  • 完美。谢谢你。新的 DataFrame 是关键!知道了这个小窍门,我就自己去算连续输家吧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-11
  • 2020-11-18
  • 1970-01-01
  • 2019-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多