相关疑难解决方法(0)

熊猫群累计总和

我想在我的Pandas数据帧中添加累积和列,以便:

name | day       | no
-----|-----------|----
Jack | Monday    | 10
Jack | Tuesday   | 20
Jack | Tuesday   | 10
Jack | Wednesday | 50
Jill | Monday    | 40
Jill | Wednesday | 110
Run Code Online (Sandbox Code Playgroud)

变为:

Jack | Monday     | 10  | 10
Jack | Tuesday    | 30  | 40
Jack | Wednesday  | 50  | 90
Jill | Monday     | 40  | 40
Jill | Wednesday  | 110 | 150
Run Code Online (Sandbox Code Playgroud)

我试过各种连击df.groupbydf.agg(lambda x: cumsum(x))无济于事.提前致谢!

python pandas

65
推荐指数
5
解决办法
5万
查看次数

计算数据帧组内的差异

假设我有一个包含3列的数据框:Date,Ticker,Value(没有索引,至少可以开始).我有很多日期和许多代码,但每个(ticker, date)元组都是独一无二的.(但显然相同的日期会出现在很多行中,因为它会存在多个代码,并且同一个代码将显示在多行中,因为它将存在很多日期.)

最初,我的行按特定顺序排列,但未按任何列排序.

我想计算每个股票代码的第一个差异(每日更改)(按日期排序),并将它们放在我的数据框中的新列中.鉴于这种背景,我不能简单地这样做

df['diffs'] = df['value'].diff()
Run Code Online (Sandbox Code Playgroud)

因为相邻的行不是来自同一个自动收报机.排序如下:

df = df.sort(['ticker', 'date'])
df['diffs'] = df['value'].diff()
Run Code Online (Sandbox Code Playgroud)

没有解决问题,因为会有"边界".即在那之后,一个股票代码的最后一个值将高于下一个股票代码的第一个值.然后计算差异会使两个代码之间产生差异.我不想要这个.我希望每个自动收报机的最早日期NaN在其差异列中结束.

这似乎是一个明显的使用时间,groupby但无论出于何种原因,我似乎无法让它正常工作.为了清楚起见,我想执行以下过程:

  1. 根据它们对行进行分组 ticker
  2. 在每个组中,按行分类 date
  3. 在每个已排序的组中,计算value列的差异
  4. 将这些差异放入新diffs列中的原始数据框中(理想情况下,保留原始数据框顺序).

我不得不想象这是一个单行.但是我错过了什么?


编辑于2013-12-17的晚上9点

好的...一些进展.我可以执行以下操作来获取新的数据帧:

result = df.set_index(['ticker', 'date'])\
    .groupby(level='ticker')\
    .transform(lambda x: x.sort_index().diff())\
    .reset_index()
Run Code Online (Sandbox Code Playgroud)

但是,如果我理解groupby的机制,我的行现在将首先排序ticker,然后排序date.那是对的吗?如果是这样,我是否需要进行合并以附加差异列(当前位于result['current']原始数据框中df

python pandas

31
推荐指数
4
解决办法
3万
查看次数

标签 统计

pandas ×2

python ×2