我在pandas中使用自定义函数,该函数遍历数据框中的单元格,在不同数据框中找到相同的行,将其提取为元组,从该元组中提取随机值,然后添加用户指定的数量噪声值,然后将其返回到原始数据帧。我希望找到一种使用applymap的方法,但是找不到返回传给applymap的值的索引的方法吗?
我已经能够使用itertuples使它工作,但是我希望通过使用applymap对其进行重构并使其更加高效。
# Mock data creation
key = pd.DataFrame({'col1': [1, 2, 3], 'col2': [4,5,6], 'col3':[7,8,9]})
results = pd.DataFrame(np.zeros((3,3)))
def apply_value(value):
key_index = #THIS IS WHERE I NEED A WAY TO ACCESS INDEX
key_tup= key.iloc[key_index]
length = (len(key_tup) - 1)
random_int = random.randint(1, length)
random_value = key_tup[random_int]
return random_value
results = results.applymap(apply_value)
答案 0 :(得分:0)
如果我正确理解了您的问题,那么这段代码应该可以工作。问题是applymap
不保存数据帧的索引,所以您要做的是应用嵌套的apply
函数:第一个遍历行,然后从那里获取键,然后第二个遍历每行中的列。希望能帮助到你。让我知道是否可以:D
# Mock data creation
key = pd.DataFrame({'col1': [1, 2, 3], 'col2': [4,5,6], 'col3':[7,8,9]})
results = pd.DataFrame(np.zeros((3,3)))
def apply_value(value, key_index):
key_tup= key.loc[key_index]
length = (len(key_tup) - 1)
random_int = random.randint(1, length)
random_value = key_tup[random_int]
return random_value
results = results.apply(lambda x: x.apply(lambda d: apply_value(d, x.name)), axis=1)