如何从包含一系列值的列中创建一个新的增量值列?

2024-05-13 18:54:02 发布

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

我对Pandas/Python还很陌生,所以如果这是直截了当的话,我很抱歉。我正在工作中做一个项目,需要一些帮助。你知道吗

我有一些数据描述了血液样本在储藏箱中的位置。 我目前在名为“位置”的列中有一定数量的样本占据的位置范围,格式为“1\u 5”,这意味着这些样本占据了存储箱中的位置1、2、3、4和5。你知道吗

[此处为数据帧][1] [1] :https://i.stack.imgur.com/DMhZm.jpg。你知道吗

我想要的是在提供的范围内的每个样本都有自己的位置号。所以现在的数据不是这样的:

病人-箱子-位置

1号病人-1号信箱-97号100

1号病人-1号信箱-97号100

1号病人-1号信箱-97号100

1号病人-1号信箱-97号100

1号病人-2号信箱-30号32

1号病人-2号信箱-30号32

1号病人-2号信箱-30号32

我希望它看起来像这样:

病人-箱子-位置

1号病人-1-97号信箱

1号病人-1-98号信箱

1号病人-1-99号信箱

1号病人-盒子1-100

病人1-盒子2-30

病人1-盒子2-31

病人1-信箱2-32

有人知道解决这个问题的方法吗?你知道吗

谢谢


Tags: 数据项目httpspandas数量stack格式盒子
1条回答
网友
1楼 · 发布于 2024-05-13 18:54:02

用途:

df['Position'] = (df.groupby('Position').cumcount() + 
                 df['Position'].str.split('_').str[0].astype(int))
print (df)
     Patient    Box  Position
0  patient 1  box 1        97
1  patient 1  box 1        98
2  patient 1  box 1        99
3  patient 1  box 1       100
4  patient 1  box 2        30
5  patient 1  box 2        31
6  patient 1  box 2        32

细节

^{}获取每个组的计数:

print (df.groupby('Position').cumcount())
0    0
1    1
2    2
3    3
4    0
5    1
6    2
dtype: int64   

并在转换为integer_之前添加列Position的提取的第一个值:

print (df['Position'].str.split('_').str[0].astype(int))
0    97
1    97
2    97
3    97
4    30
5    30
6    30
Name: Position, dtype: int32

相关问题 更多 >