【发布时间】:2021-12-04 12:46:36
【问题描述】:
我有一个具有这些特征的数据框(索引是浮点值):
import pandas as pd
d = {'A': [1,2,3,4,5,6,7,8,9,10],
'B': [1,2,3,4,5,6,7,8,9,10],
'C': [1,2,3,4,5,6,7,8,9,10],
'D': ['one','one','one','one','one','two','two','two','two','two']}
df = pd.DataFrame(data=d)
df
A B C D
50.0 1 1 1 one
50.2 2 2 2 one
50.4 3 3 3 one
50.6 4 4 4 one
50.8 5 5 5 one
51.0 6 6 6 two
51.2 7 7 7 two
51.4 8 8 8 two
51.6 9 9 9 two
51.8 10 10 10 two
以及具有这些值的偏移量列表(它们也是浮点数):
offsets = [[0.4, 0.6, 0.8], [0.2, 0.4, 0.6]]
我需要遍历 A、B 和 C 列上的数据框,从 D 列中选择分类值,根据与列表中偏移量相关的索引将 A、B 和 C 列中的最后一个值替换为 nan ,产生这样的数据框:
A B C D
50.0 1 1 1 one
50.2 2 2 nan one
50.4 3 nan nan one
50.6 nan nan nan one
50.8 nan nan nan one
51.0 6 6 6 two
51.2 7 7 7 two
51.4 8 8 nan two
51.6 9 nan nan two
51.8 nan nan nan two
offset的值是指什么值必须从下往上设置为nan。例如:offsets[0][0]=0.4,所以对于A列当D == 'one'时,自下而上的两个值必须设置为nan(第4行和第3行,50.8-0.4 = 50.4 - 50.4不变)。对于 A,当 D == 'two' 时,偏移量[1][0]=0.2,因此必须将自下而上的一个值设置为 nan(第 9 行,51.8-0.2 = 51.6 - 51.6 不变)。 Offsets[1][0]=0.6,所以对于B列当D == 'one'时,自下而上的三个值必须设置为nan(第4、3和2行,50.8-0.6 = 50.2 - 50.2不'不改变)。对于 B,当 D == 'two' 时,偏移量[1][1]=0.4,因此必须将自下而上的两个值设置为 nan(第 9 行和第 8 行,51.8-0.4 = 51.4 - 51.4 不变)。对于 C 列也是一样的。
知道怎么做吗?快速评论 - 我想替换数据框本身中的这些值,而不创建新值。
【问题讨论】:
-
为什么第二行只有一个偏移量,第三行是两个偏移量?
-
这里的偏移量是什么意思?
-
抱歉,我没有说得那么具体。偏移量的值意味着什么值必须从下往上设置为 nan。例如:offsets[0]=2,所以对于列 A 当 D == 'one' 时,必须将自下而上的两个值设置为 nan(第 4 行和第 3 行)。对于 A 当 D == 'two' 时,必须将自下而上的两个值设置为 nan(第 9 行和第 8 行)。对于 offsets[1]=3,B 列也一样,以此类推。
标签: python pandas dataframe indexing substitution