首页 > 解决方案 > 分离重复列值

问题描述

这个问题应该是以前问过的。。。

我有记录值的长文件,例如时间、温度等。基于输入函数所在的某个步骤。“步骤”列记录当前步骤,在这种情况下为 1 到 20 个步骤。这些步骤可以重复如下(数据的一小部分):

import pandas as pd

raw_data = [{'Date': '1-10-19', 'Read': 1.1, 'Step': 1},
            {'Date': '2-10-19', 'Read': 1.11, 'Step': 1},
            {'Date': '3-10-19', 'Read': 10.1, 'Step': 2},
            {'Date': '4-10-19', 'Read': 10.11, 'Step': 2},
            {'Date': '5-10-19', 'Read': 1.2, 'Step': 1},
            {'Date': '6-10-19', 'Read': 1.21, 'Step': 1},
            {'Date': '7-10-19', 'Read': 10.2, 'Step': 2},
            {'Date': '8-10-19', 'Read': 10.21, 'Step': 2}]

df = pd.DataFrame(raw_data)
      Date   Read  Step
0  1-10-19   1.10     1
1  2-10-19   1.11     1
2  3-10-19  10.10     2
3  4-10-19  10.11     2
4  5-10-19   1.20     1
5  6-10-19   1.21     1
6  7-10-19  10.20     2
7  8-10-19  10.21     2

我需要随着时间的推移跟踪 Step 序列组,如下所示:

      Date   Read  Step   Step_New
0  1-10-19   1.10     1   1.1
1  2-10-19   1.11     1   1.1
2  3-10-19  10.10     2   2.1
3  4-10-19  10.11     2   2.1
4  5-10-19   1.20     1   1.2
5  6-10-19   1.21     1   1.2
6  7-10-19  10.20     2   2.2
7  8-10-19  10.21     2   2.2

我应该如何添加这个新列?最后,我将在groupby本专栏中对新的单个步骤进行一些统计。

标签: pythonpandasdataframe

解决方案


这是跟踪每个 Step 组的小数步长的替代方法:

       Date    Read  Step
0   1-10-19    1.10     1
1   2-10-19    1.11     1
2   3-10-19   10.10     2
3   4-10-19   10.11     2
4   5-10-19    1.20     1
5   6-10-19    1.21     1
6   7-10-19   10.20     2
7   8-10-19   10.21     2
8   8-10-19  100.10     3
9   8-10-19  100.11     3
10  6-10-19    1.22     1
11  6-10-19    1.31     1

df["Step_New"] = df.Step + df.groupby('Step')['Read'].apply(lambda x: round(x - x.astype(int), 1))                                                                                                 

输出:

       Date    Read  Step  Step_New
0   1-10-19    1.10     1       1.1
1   2-10-19    1.11     1       1.1
2   3-10-19   10.10     2       2.1
3   4-10-19   10.11     2       2.1
4   5-10-19    1.20     1       1.2
5   6-10-19    1.21     1       1.2
6   7-10-19   10.20     2       2.2
7   8-10-19   10.21     2       2.2
8   8-10-19  100.10     3       3.1
9   8-10-19  100.11     3       3.1
10  6-10-19    1.22     1       1.2
11  6-10-19    1.31     1       1.3

推荐阅读