繁体   English   中英

pandas中的applymap如何访问function内的索引?

[英]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
  • key_tup = key.iloc[key_index]
  • 业务:
    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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM