使用Python创建具有依赖于另一列的值的列

2024-06-18 15:03:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Pandas DataFrame,它包含id和相关的值,并且对于每个值,我想创建一个新列,该列的值在初始值的范围内,范围是一个可确定的数量。我的初始数据是这样的

iD     Value
AAAA   10
AAAA   15
AAAA   5
BBBB   10
BBBB   6
BBBB   11
CCCC   8 
CCCC   16
CCCC   14

到目前为止,我得到的代码如下,范围设置为+/-1

^{pr2}$

我想得到的是

iD     Value   NewVal
AAAA   10      9
AAAA   10      10
AAAA   10      11
AAAA   15      14
AAAA   15      15
AAAA   15      16
AAAA   5       4
AAAA   5       5
AAAA   5       6
BBBB   10      9
BBBB   10      10
BBBB   10      11
BBBB   6       5
BBBB   6       6
BBBB   6       7      
BBBB   11      10
BBBB   11      11
BBBB   11      12
CCCC   8       7
CCCC   8       8
CCCC   8       9
CCCC   16      14
CCCC   16      15
CCCC   16      16
CCCC   14      13
CCCC   14      14
CCCC   14      15

任何提示或建议将不胜感激。在

谢谢!在


Tags: 数据代码iddataframepandas数量value建议
2条回答

选项1
使用loc更简单

df.loc[df.index.repeat(3)].assign(
    NewVal=(df.Value.values[:, None] + [-1, 0, 1]).ravel())

选项2
或者重建整个数据帧

^{pr2}$

这两个选项都使用了将[-1, 0, 1]添加到使用numpy广播的值中,然后使用ravel

      iD Value NewVal
0   AAAA    10      9
1   AAAA    10     10
2   AAAA    10     11
3   AAAA    15     14
4   AAAA    15     15
5   AAAA    15     16
6   AAAA     5      4
7   AAAA     5      5
8   AAAA     5      6
9   BBBB    10      9
10  BBBB    10     10
11  BBBB    10     11
12  BBBB     6      5
13  BBBB     6      6
14  BBBB     6      7
15  BBBB    11     10
16  BBBB    11     11
17  BBBB    11     12
18  CCCC     8      7
19  CCCC     8      8
20  CCCC     8      9
21  CCCC    16     15
22  CCCC    16     16
23  CCCC    16     17
24  CCCC    14     13
25  CCCC    14     14
26  CCCC    14     15

pandas.repeat,然后使用groupby,并取消列表

df1=df.loc[df.index.repeat(3)]
import operator
df1.groupby(['iD','Value'],as_index=False).apply(lambda x :list(map(operator.sub, x['Value'], [1,0,-1]))).\
    apply(pd.Series).stack().reset_index().\
        drop('level_2',1).rename(columns={0:'New'})

Out[253]: 
      iD  Value  New
0   AAAA      5    4
1   AAAA      5    5
2   AAAA      5    6
3   AAAA     10    9
4   AAAA     10   10
5   AAAA     10   11
6   AAAA     15   14
7   AAAA     15   15
8   AAAA     15   16
9   BBBB      6    5
10  BBBB      6    6
11  BBBB      6    7
12  BBBB     10    9
13  BBBB     10   10
14  BBBB     10   11
15  BBBB     11   10
16  BBBB     11   11
17  BBBB     11   12
18  CCCC      8    7
19  CCCC      8    8
20  CCCC      8    9
21  CCCC     14   13
22  CCCC     14   14
23  CCCC     14   15
24  CCCC     16   15
25  CCCC     16   16
26  CCCC     16   17

相关问题 更多 >