[英]How to access index inside function for applymap in pandas?
我在 pandas 中使用自定义 function 迭代 dataframe 中的单元格,在不同的 dataframe 中找到同一行,将其提取为元组,从该元组中提取随机值,然后将用户指定的噪声量添加到value 并将其返回到原始 dataframe。我希望找到一种使用applymap
来执行此操作的方法,这可能吗? 我找不到使用applymap
的方法,所以我使用了itertuples
,但是applymap
解决方案应该更有效。
import pandas as pd
# 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)
如果我正确理解了您的问题,那么这段代码应该可以工作。 问题是applymap
不保存数据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)
严格来说,您不需要访问 function 中的行索引,还有其他更简单的方法可以实现这一点。 你可能完全没有它,你甚至不需要做 pandas JOIN/merge of rows of key
。 但首先,如果key
真的应该是元组的 dataframe,则需要修复示例数据。
所以你想:
apply(... , axis=1)
扫过每一列key.loc[key_index]
...key_tup
,但在你的示例中, key
是一个简单的 dataframe,而不是元组的 dataframe length = (len(key_tup) - 1)
random_int = random.randint(1, length)
random_value = key_tup[random_int]
np.random.choice(key_tup)
apply_value()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.