我有一个数据框,它显示了一些具有累积值的特性。我需要识别这些特征,以便恢复累积值。 这就是我的数据集的外观(加上大约50个变量):
a b
346 17
76 52
459 70
680 96
679 167
246 180
我希望达到的目标是:
a b
346 17
76 35
459 18
680 26
679 71
246 13
我看到了这个答案,但它首先还原值,然后尝试标识列。我不能换一种方式吗?首先确定特征,然后恢复值
我现在要做的是运行以下代码,以便为我提供具有累积值的功能名称:
def accmulate_col(value):
count = 0
count_1 = False
name = []
for i in range(len(value)-1):
if value[i+1]-value[i] >= 0:
count += 1
if value[i+1]-value[i] > 0:
count_1 = True
name.append(1) if count == len(value)-1 and count_1 else name.append(0)
return name
df.apply(accmulate_col)
之后,我将这些功能名称手动保存在一个名为cum_features的列表中,并还原这些值,从而创建所需的数据集:
df_clean = df.copy()
df_clean[cum_cols] = df_clean[cum_features].apply(lambda col: np.diff(col, prepend=0))
有更好的办法解决我的问题吗
要确定哪些列在整个列中具有递增*值,需要对所有值应用条件。因此,从这个意义上讲,必须首先使用这些值来确定哪些列符合条件
考虑到这一点,给定一个数据帧,例如:
找出哪些列包含递增的值只是在dataframe中的所有值上使用diff并检查哪些值在整个列中递增的问题
这可以写成:
然后,您可以只使用列名来选择其中包含
True
的列名*(术语“累积”实际上并不代表您使用的条件。您希望它是累积的还是只是增加的?累积意味着特定行/索引中的值是该索引之前所有值的总和,而增加则意味着当前行/索引中的值大于之前的值。)
相关问题 更多 >
编程相关推荐