繁体   English   中英

Pandas - 添加一个新列,根据其他列值从 arrays 中提取值

[英]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.

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