[英]Extracting a single value from a Pandas Dataframe based on info in other column
[英]Pandas - Add a new column extracting value from arrays based on other column value
我目前无法根据 dataframe 的值尝试从列表/数组中提取值。
想象一下我有这个数组。 这个数组我可以手动创建,所以我可以以任何我想要的方式放置数字我只是认为这个 python 列表是最好的但我可以在这里做任何事情
value = [[30, 120, 600, 3000], [15, 60, 300, 1500], [30, 120, 600, 3000], [10, 40, 200, 1000],[10, 40, 200, 1000], [10, 40, 200, 1000], [10, 40, 200, 1000], [5, 20, 100, 500]]
我还有一个来自更大/动态处理的数据框,其中我有两列,它们是 int 类型。 这里以重新创建这两列的代码为例。 id1 go 从 0 到 6 和 id2 go 从 0 到 3 的数组可能值
data = {'id1': [4, 2, 6, 6], 'id2': [1, 2, 3, 1]}
df = pd.DataFrame(data)
我想要做的是在 dataframe df 中添加一个附加列,该列基于数组的值,具体取决于两列。 因此,例如,数据框的第一行将采用 value[4][1]=40 的值,最终得到这样的 dataframe
result = {'id1': [4, 2, 6, 6], 'id2': [1, 2, 3, 1], 'matched value': [40, 600, 1000, 40]}
dfresult = pd.DataFrame(result)
我对实现这一目标的最佳方法有点迷茫。 我想到的是一个非常残酷的解决方案,我可以做的是获取多维数组的值并创建一个列表,其中我拥有所有可能的 7*4 组合,在数据框中创建一个新列,即连接两个 ID,然后根据简单条件进行直接连接。 这在这种情况下可能会起作用,因为可能的组合很少,但我确信这里有一个学习机会以一种让我逃避的动态方式使用列表!
您可以使用列表理解来遍历 id 对并检索每对的相应值
df['matched_val'] = [value[i][j] for i, j in zip(df['id1'], df['id2'])]
或者使用 numpy 索引的更好解决方案,但仅当value
内的子列表长度相等时才适用:
df['matched_val'] = np.array(value)[df['id1'], df['id2']]
结果
id1 id2 matched_val
0 4 1 40
1 2 2 600
2 6 3 1000
3 6 1 40
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.