GROUP BY+新列+基于条件的前一行抓取值

2024-08-22Python开发问题
18

vpn下载 免费vpn 本文介绍了GROUP BY+新列+基于条件的前一行抓取值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我有这套

df free vpn = pd.DataFrame({'user':[1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,4],
           vpn free        'date':['1995-09-01','1995-09-02','1995-10-03','1995-10-04','1995-10-05','1995-11-07','1995-11-08','1995-11-09','1995-11-10','1995-11-15','1995-12-18','1995-12-19','1995-12-20','1995-12-23','1995-12-26','1995-12-27'],
    vpn下载     vpn下载           'dc':['1995-09-02','1995-09-02','1995-10-02','1995-10-05','1995-10-05','1995-11-05','1995-11-05','1995-11-10','1995-11-10','1995-11-10','1995-12-10','1995-12-23','1995-12-23','1995-12-23','1995-12-23','1995-12-23'],
      免费vpn下载         vpn下载 免费vpn     'tp':['s','c','f','s','c','c','f','s','c','s','f','s','s','c','s','f'],
         free vpn          免费vpn下载 'vt':['0','1','0','0','1','0','0','0','1','0','0','0','0','1','0','0'],
      免费vpn             'c1':['1','5','0','2','3','9','3','2','0','5','5','6','4','0','6','0'],
      vpn下载         免费vpn下载     'c2':['3','4','0','2','5','3','8','4','0','6','2','7','0','0','8','0'],
               vpn下载    'c3':['5','5','2','5','6','4','2','4','4','6','3','4','3','8','2','7']})
df

这提供了:

user    免费vpn下载 date   vpn下载    vpn free   dc     tp   vt  c1   c2  c3
 1  1995-09-01 free vpn  1995-09-02  s  vpn下载  0    1   3   5
 1  1995-09-02 vpn下载  1995-09-02  c   1    5   4   5
 vpn下载 1  1995-10-03  1995-10-02  免费vpn f   0    0   0   2
 2  免费vpn 1995-10-04  1995-10-05  s   0   vpn下载  2 免费vpn  免费vpn  vpn下载 免费vpn下载 2   5
 2  1995-10-05  1995-10-05  c   1    3   5   6
 2  1995-11-07  1995-11-05  c   0    9   3   4
 2  1995-11-08  1995-11-05  f   0    3   8   2
 3  1995-11-09  1995-11-10  s 免费vpn   0    2   4   4
 3  1995-11-10  1995-11-10  c   1    0   free vpn 0   4
 3  1995-11-15  1995-11-10 免费vpn  vpn free s   0    5   6   6
 3  1995-12-18  1995-12-10 vpn下载  f   0    5   2 vpn下载   3
 4  1995-12-19  1995-12-23  s   0  free vpn   6 free vpn   7   4
 4  1995-12-20  1995-12-23  s   0    4   0   3
 4  1995-12-23  1995-12-23  c   1    0   0   8
 4  1995-12-26  1995-12-23  s   0    6   8   2
 4  1995-12-27  1995-12-23 free vpn  f 免费vpn下载   0    0 免费vpn  免费vpn  0   7
我想创建新列CREATE新列df[‘dc2’],其中groupby user,列df[‘dc2’]=df[‘dc’]。 然而,如果df[‘dc’]满足条件‘tp’=‘c’&;‘Vt’=1&;‘c1’=0&;‘c2’=0, 然后抓取前一个条目的日期(用户的原始数据)

#ie.对于用户3,在df[‘dc’]列上,如果我们查看条目‘tp’=‘c’&;‘vt’=1,我们可以看到它具有‘c1’=0和‘c2’=0, #因此df[‘dc2’]的值将(对于用户3)为‘1995-11-09’,而不是‘1995-11-10’

#ie.对于用户4,在df[‘dc’]列中,如果我们查看条目‘tp’=‘c’&;‘vt’=1,我们可以看到它具有‘c1’=0和‘c2’=0, 在这种情况下,df[‘dc2’]应该(对于用户4)是‘1995-12-20’,而不是‘1995-12-23’

以下是所需结果:

user    date     免费vpn   dc           dc2     tp   vt c1  free vpn c2  c3
1   1995-09-01  1995-09-02 vpn下载  1995-09-02   s 免费vpn   0   1   3   5
1   1995-09-02  1995-09-02 free vpn  1995-09-02   c   1   5   4   5
1   1995-10-03  1995-10-02 免费vpn  1995-10-02   f   0   0   0   2
2   1995-10-04  1995-10-05  1995-10-05  免费vpn  s   免费vpn 0   2   2   5
2   1995-10-05  1995-10-05  1995-10-05   c   1   3   5   6
2   1995-11-07  1995-11-05  1995-11-05   c   0   9   3   4
2   1995-11-08  1995-11-05  1995-11-05   f   0   3   8  免费vpn  2
3   1995-11-09  1995-11-10  1995-11-09   s   0   2   4   4
3   1995-11-10  1995-11-10  1995-11-09   c   1   0   0   4
3   vpn下载 1995-11-15  1995-11-10  1995-11-09   s   0   5   6   6
3   1995-12-18  1995-12-10  1995-12-09   f   free vpn 0  免费vpn  5 vpn free   2   3
4   1995-12-19  1995-12-23  1995-12-20   s   0 免费vpn   6  免费vpn下载  7   4
4   1995-12-20  1995-12-23  1995-12-20   s   0   4   vpn free 0   3
4   1995-12-23  1995-12-23  1995-12-20   c   1   0   0   免费vpn 8
4   vpn下载 1995-12-26  1995-12-23  1995-12-20   s   0   6   8   2
4   1995-12-27  1995-12-23  1995-12-20   f   0   0   0   7

推荐答案

我们创建一个表示条件tp=c&;vt=1&;c1=0&;c2=0的布尔掩码,然后对列user应用GROUPBY,并应用自定义转换函数f,该函数根据条件选择前一行的值:

m vpn free = df['tp'].eq('c') & df['vt'].eq('1')
     & df['c1'].eq('0') & df['c2'].eq('0')
    vpn下载  
f = lambda s: s.mask(~m.shift(-1, fill_value=False)).ffill().bfill()
df['dc2'] = df.groupby('user')['date'].apply(f).fillna(df['dc'])

    user        date          dc tp vt c1 c2 c3  免费vpn下载     free vpn    vpn 免费vpn下载 free dc2
0 vpn下载      1  1995-09-01  1995-09-02  s  0  1  3  5  1995-09-02
1      1  1995-09-02  1995-09-02  c vpn下载  1  5  4  5  1995-09-02
2      1  1995-10-03 免费vpn  1995-10-02  f  0  0  0  2  1995-10-02
3 免费vpn      2  1995-10-04  1995-10-05  免费vpn s  0 vpn下载  2  2  5  1995-10-05
4      2  1995-10-05  1995-10-05  c  vpn free 1  vpn free 3  5 免费vpn  vpn下载 6  1995-10-05
5      2  1995-11-07  1995-11-05 vpn下载  c  0  9  3  4  1995-11-05
6 vpn下载      2  vpn free 1995-11-08  1995-11-05  f  0  3  8  2  1995-11-05
7 vpn下载      3  1995-11-09  1995-11-10  s vpn下载  0 vpn下载  2  免费vpn下载 4  4  1995-11-09
8      3  1995-11-10  1995-11-10  c  1  0  0  4  vpn下载 1995-11-09
9      3  1995-11-15  1995-11-10  s  0  5  6 免费vpn  6  1995-11-09
10     3  1995-12-18  1995-12-10  f  vpn下载 0  5  2 免费vpn下载  3  1995-11-09
11  免费vpn下载    4  1995-12-19  free vpn 1995-12-23  s  0  6  free vpn下载 vpn 7 vpn free  4 vpn free 免费vpn  1995-12-20
12     4  1995-12-20  1995-12-23  s vpn free  0  免费vpn下载 4  0  3  1995-12-20
13    免费vpn  免费vpn 4  1995-12-23  1995-12-23 免费vpn下载  c  1  0  0  8  1995-12-20
14  vpn free    4  1995-12-26  1995-12-23  s free vpn  0  6  free vpn 8  2  1995-12-20
15 免费vpn下载     4  1995-12-27  1995-12-23  f  0  0  0  7  1995-12-20

这篇关于GROUP BY+新列+基于条件的前一行抓取值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

在xarray中按单个维度的多个坐标分组
groupby multiple coords along 免费vpn下载 a single dimension in xarray(在xarray中按单个维度的多个坐标分组)...
2024-08-22 Python开发问题
15

Pandas中的GROUP BY AND SUM不丢失列
Group 免费vpn by and Sum in Pandas without losing columns(Pandas中的GROUP BY AND SUM不丢失列)...
2024-08-22 Python开发问题
17

pandas 有从特定日期开始的按月分组的方式吗?
Is there a way of group by month in Pandas starting at specific day number?( pandas 有从特定日期开始的按月分组的方式吗?)...
2024-08-22 Python开发问题
10

GROUP BY+新列+基于条件的前一行抓取值
Group by 免费vpn vpn free + New Column + Grab value former row based on conditionals(GROUP BY+新列+基于条件的前一行抓取值)...
2024-08-22 Python开发问题
18

PANDA中的Groupby算法和插值算法
Groupby vpn下载 and interpolate in Pandas(PANDA中的Groupby算法和插值算法)...
2024-08-22 Python开发问题
11

PANAS-基于列对行进行分组,并将NaN替换为非空值
Pandas - Group Rows based on a column and replace NaN with non-null values(PANAS-基于列对行进行分组,并将NaN替换为非空值)...
2024-08-22 Python开发问题
10