【问题标题】:performing differences between rows in pandas based on columns values根据列值在 pandas 中的行之间执行差异
【发布时间】:2015-10-09 03:55:52
【问题描述】:

我有这个数据框,我正在尝试创建一个新列,我想在其中存储基于代码和日期销售的产品的差异。 例如,这是起始数据框:

      date     code sold
0   20150521    0   47
1   20150521    12  39
2   20150521    16  39
3   20150521    20  38
4   20150521    24  38
5   20150521    28  37
6   20150521    32  36
7   20150521    4   43
8   20150521    8   43
9   20150522    0   47
10  20150522    12  37
11  20150522    16  36
12  20150522    20  36
13  20150522    24  36
14  20150522    28  35
15  20150522    32  31
16  20150522    4   42
17  20150522    8   41
18  20150523    0   50
19  20150523    12  48
20  20150523    16  46
21  20150523    20  46
22  20150523    24  46
23  20150523    28  45
24  20150523    32  42
25  20150523    4   49
26  20150523    8   49
27  20150524    0   39
28  20150524    12  33
29  20150524    16  30
... ... ... ...
150 20150606    32  22
151 20150606    4   34
152 20150606    8   33
153 20150607    0   31
154 20150607    12  30
155 20150607    16  30
156 20150607    20  29
157 20150607    24  28
158 20150607    28  26
159 20150607    32  24
160 20150607    4   30
161 20150607    8   30
162 20150608    0   47

我认为这可能是一个解决方案...

  full_df1=full_df[full_df.date == '20150609'].reset_index(drop=True)
    full_df1['code'] = full_df1['code'].astype(float)
    full_df1= full_df1.sort(['code'], ascending=[False])

    code date      sold
8   32  20150609    33  
7   28  20150609    36  
6   24  20150609    37  
5   20  20150609    39  
4   16  20150609    42  
3   12  20150609    46  
2   8   20150609    49  
1   4   20150609    49  
0   0   20150609    50  





  full_df1.set_index('code')['sold'].diff().reset_index()   

这给了我一个日期 20150609 的输出:

    code difference
0   32  NaN
1   28  3
2   24  1
3   20  2
4   16  3
5   12  4
6   8   3
7   4   0
8   0   1

是否有更好的解决方案以更 Python 的方式获得相同的结果? 我想创建一个新列 [difference] 并将数据存储在那里,结果有 4 列 [date, code, sold, difference]

【问题讨论】:

  • 看起来你所做的只是df['difference'] = df.groupby('date')['sold'].transform(pd.Series.diff)

标签: python python-2.7 pandas


【解决方案1】:

panda 的 groupby 功能正是为此而构建的,我强烈建议您阅读并通读此文档:panda's groupby documentation

此代码复制了您所要求的内容,但适用于每个日期。

df = pd.DataFrame({'date':['Mon','Mon','Mon','Tue','Tue','Tue'],'code':[10,21,30,10,21,30], 'sold':[12,13,34,10,15,20]})
df['difference'] = df.groupby('date')['sold'].diff()

df

    code    date    sold    difference
0   10      Mon     12      NaN
1   21      Mon     13      1
2   30      Mon     34      21
3   10      Tue     10      NaN
4   21      Tue     15      5
5   30      Tue     20      5

【讨论】:

    猜你喜欢
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 2020-06-16
    • 1970-01-01
    相关资源
    最近更新 更多