根据两行值的差异附加 nan 行
appending nan rows according to difference of two row value
你好,我有一个像这样的数据框:
df1
A B
0 0.7 7
1 1.0 10
2 1.2 12
3 1.4 14
4 1.8 18
5 14 7
6 17 10
我正在尝试根据 B 列行之间的差异附加 nan 行。我的意思是,例如,B 列第 0 行和第 1 行的差值为 3。因此我需要附加 2 个 nan 行以在它们之间具有连续的整数值。然后我将在它们之间进行插值。因为我有大量数据并且需要快速完成,所以我认为使用 pandas 更好,所以请告诉我 pandas 解决方案。我应该迭代它们吗?你怎么看?最终数据框将如下所示:
0 1
0 0.07 7
1 0.08 8
2 0.09 9
3 0.10 10
4 0.11 11
5 0.12 12
6 0.13 13
7 0.14 14
8 0.15 15
9 0.16 16
10 0.17 17
11 0.18 18
12 14.00 7
13 16.00 8
14 18.00 9
15 17.00 10
这就是我尝试获取此内容的原因:
0 1
0 0.07 7.0
1 NaN NaN
2 NaN NaN
3 0.10 10.0
4 0.11 11.0
5 0.12 12.0
6 NaN NaN
7 0.14 14.0
8 0.15 15.0
9 NaN NaN
10 NaN NaN
11 0.18 18.0
12 14.00 7.0
13 NaN NaN
14 NaN NaN
15 17.00 10.0
我正在寻找最 pythonic 的方式,数据科学的最佳方式?谢谢
使用-
diff = (df['B'].shift(-1) - df['B']).fillna(1)
tmp = df.reindex(df.index.repeat(diff.mask(diff < 0, 1)))
tmp.mask(tmp.diff().eq(0)).reset_index(drop=True).interpolate()
输出
A B
0 0.7 7.0
1 0.8 8.0
2 0.9 9.0
3 1.0 10.0
4 1.1 11.0
5 1.2 12.0
6 1.3 13.0
7 1.4 14.0
8 1.5 15.0
9 1.6 16.0
10 1.7 17.0
11 1.8 18.0
12 14.0 7.0
13 15.0 8.0
14 16.0 9.0
15 17.0 10.0
你好,我有一个像这样的数据框:
df1
A B
0 0.7 7
1 1.0 10
2 1.2 12
3 1.4 14
4 1.8 18
5 14 7
6 17 10
我正在尝试根据 B 列行之间的差异附加 nan 行。我的意思是,例如,B 列第 0 行和第 1 行的差值为 3。因此我需要附加 2 个 nan 行以在它们之间具有连续的整数值。然后我将在它们之间进行插值。因为我有大量数据并且需要快速完成,所以我认为使用 pandas 更好,所以请告诉我 pandas 解决方案。我应该迭代它们吗?你怎么看?最终数据框将如下所示:
0 1
0 0.07 7
1 0.08 8
2 0.09 9
3 0.10 10
4 0.11 11
5 0.12 12
6 0.13 13
7 0.14 14
8 0.15 15
9 0.16 16
10 0.17 17
11 0.18 18
12 14.00 7
13 16.00 8
14 18.00 9
15 17.00 10
这就是我尝试获取此内容的原因:
0 1
0 0.07 7.0
1 NaN NaN
2 NaN NaN
3 0.10 10.0
4 0.11 11.0
5 0.12 12.0
6 NaN NaN
7 0.14 14.0
8 0.15 15.0
9 NaN NaN
10 NaN NaN
11 0.18 18.0
12 14.00 7.0
13 NaN NaN
14 NaN NaN
15 17.00 10.0
我正在寻找最 pythonic 的方式,数据科学的最佳方式?谢谢
使用-
diff = (df['B'].shift(-1) - df['B']).fillna(1)
tmp = df.reindex(df.index.repeat(diff.mask(diff < 0, 1)))
tmp.mask(tmp.diff().eq(0)).reset_index(drop=True).interpolate()
输出
A B
0 0.7 7.0
1 0.8 8.0
2 0.9 9.0
3 1.0 10.0
4 1.1 11.0
5 1.2 12.0
6 1.3 13.0
7 1.4 14.0
8 1.5 15.0
9 1.6 16.0
10 1.7 17.0
11 1.8 18.0
12 14.0 7.0
13 15.0 8.0
14 16.0 9.0
15 17.0 10.0