Pandas,如果键等于另一列,则新列包含值

7rtdyuoh  于 2022-12-21  发布在  其他
关注(0)|答案(1)|浏览(120)

抱歉,如果标题没有意义,我发现很难解释在一行。
我有一个数据框,其中两列包含如下数据:

Column 1
| Selection_id |
| --------     |
| 46660181     |
| 40115397     |
| 267698       |
| 34774        | 
| 449342       | 

Column 2

| Bsps | 
| -------- | 
| 46660181: 2.1, 40115397: 1.75, 267698: 3.15, 34774: 2.64, 449342: 3.9   |

我需要做的是创建一个新列,其中包含bsp的值,只要选择id与bsp键匹配,那么46660181旁边的列中就会有2.1,我希望这是有意义的!
我没有一个伟大的知识Python或Pandas,因为我没有这样做很长时间,但我会尽我所能,以沿着!
任何帮助都将不胜感激,谢谢。

ogq8wdun

ogq8wdun1#

这里假设一些事情......如果您想重新构造初始数据,有比df.apply更快的方法,但只要数据较小并且不需要扩展,它就可以工作。

import pandas

df = pd.DataFrame(dict(cola=[2,1,3], colb=[[{1:4},{2:5},{3:6}], [{1:4},{2:5},{3:6}],[{1:4},{2:5},{3:6}],],))

|    |   cola | colb                     |
|---:|-------:|:-------------------------|
|  0 |      2 | [{1: 4}, {2: 5}, {3: 6}] |
|  1 |      1 | [{1: 4}, {2: 5}, {3: 6}] |
|  2 |      3 | [{1: 4}, {2: 5}, {3: 6}] |

解决方案:

df['val'] = df.apply(lambda row: [x.get(row.cola) for x in row.colb if x.get(row.cola) is not None][0], axis=1)

|    |   cola | colb                     |   val |
|---:|-------:|:-------------------------|------:|
|  0 |      2 | [{1: 4}, {2: 5}, {3: 6}] |     5 |
|  1 |      1 | [{1: 4}, {2: 5}, {3: 6}] |     4 |
|  2 |      3 | [{1: 4}, {2: 5}, {3: 6}] |     6 |

相关问题