我有一个数据框,我试图在其中添加一列顺序差异.我找到了一个我喜欢的方法(并且很好地概括了我的用例).但是我注意到了一个奇怪的事情.你能帮我理解吗?
以下是一些具有正确结构的数据(代码在此处建模的代码):
import pandas as pd
import numpy as np
import random
from itertools import product
random.seed(1) # so you can play along at home
np.random.seed(2) # ditto
# make a list of dates for a few periods
dates = pd.date_range(start='2013-10-01', periods=4).to_native_types()
# make a list of tickers
tickers = ['ticker_%d' % i for i in range(3)]
# make a list of all the possible (date, ticker) tuples
pairs = list(product(dates, tickers))
# put them in a random …Run Code Online (Sandbox Code Playgroud) 例如,我有以下数据框:
Date indicator_1 indicator_2
2013-04-01 03:50:00 x w
2013-04-01 04:00:00 y u
2013-04-01 04:15:00 z v
2013-04-01 04:25:00 x w
2013-04-01 04:25:00 z u
2013-04-01 04:30:00 y u
2013-04-01 04:35:00 y w
2013-04-01 04:40:00 z w
2013-04-01 04:40:00 x u
2013-04-01 04:40:00 y v
2013-04-01 04:50:00 x w
Run Code Online (Sandbox Code Playgroud)
我的目标是使用以下规则创建两列:
第一栏应该告诉我自上次在indicator_1栏上出现“ x”以来的分钟数。
第二列应提供自上次在指标_1上出现对“ y”和在指标_2列上出现“ u”以来的分钟数。
对于具有完全相同的小时且其中一个时间与“ x”(在第一种情况下)或对“ y”,“ u”(在第二种情况下)相对应的行,计算分钟数应针对变量的先前出现进行。因此,所需的输出应类似于:
Date desired_column_1 desired_column_2 indicator_1 indicator_2
2013-04-01 03:50:00 NaN NaN x w
2013-04-01 04:00:00 10.0 NaN y u
2013-04-01 04:15:00 25.0 15.0 z …Run Code Online (Sandbox Code Playgroud) 我有一个类似以下的数据框(下面是特定数据,这是通用的)。否给我累加的总和:
no
name day
Jack Monday 10
Tuesday 40
Wednesday 90
Jill Monday 40
Wednesday 150
Run Code Online (Sandbox Code Playgroud)
我想“展开”累计金额,以便给我这样的东西:
print df
name day no
0 Jack Monday 10
1 Jack Tuesday 30
2 Jack Wednesday 50
3 Jill Monday 40
4 Jill Wednesday 110
Run Code Online (Sandbox Code Playgroud)
本质上,我想执行以下操作,但相反: 熊猫groupby累积和
所以我的数据框看起来像这样:
from pandas.compat import StringIO
d = StringIO('''
date,site,country,score
2018-01-01,google,us,100
2018-01-01,google,ch,50
2018-01-02,google,us,70
2018-01-03,google,us,60
2018-01-02,google,ch,10
2018-01-01,fb,us,50
2018-01-02,fb,us,55
2018-01-03,fb,us,100
2018-01-01,fb,es,100
2018-01-02,fb,gb,100
''')
df = pd.read_csv(d, sep=",")
Run Code Online (Sandbox Code Playgroud)
根据国家/地区,每个网站的得分都不同.我试图找到每个站点/国家/地区组合的1/3/5天分数差异.
输出应该是:
date,site,country,score,1_day_diff
2018-01-01,google,ch,50,0
2018-01-02,google,ch,10,-40
2018-01-01,google,us,100,0
2018-01-02,google,us,70,-30
2018-01-03,google,us,60,-10
2018-01-01,fb,es,100,0
2018-01-02,fb,gb,100,0
2018-01-01,fb,us,50,0
2018-01-02,fb,us,55,5
2018-01-03,fb,us,100,45
Run Code Online (Sandbox Code Playgroud)
我首先尝试按网站/国家/日期排序,然后按网站和国家/地区进行分组,但我无法解决与分组对象的差异.