根据数据框中的其他行值创建列
Posted
技术标签:
【中文标题】根据数据框中的其他行值创建列【英文标题】:Creating column based on other row value in dataframe 【发布时间】:2021-09-15 05:19:40 【问题描述】:我有 3 列 Id,item similar_item_id
例如:
Id. Item. Similar_item_id
1. Pen. [2,1]
2. Book. [1,4]
3. Phone. 4
4. Laptop. 3
我想创建一个名为similar_item name 的新列,而不是它的Id 喜欢
类似的项目
书,笔 笔、笔记本电脑 笔记本电脑 电话
如何在数据框中创建这个新列
【问题讨论】:
【参考方案1】:一种选择是explode
然后map
使用来自Id.
和Item.
列的映射器,然后groupby aggregate
回到list
:
df['similar_item'] = (
df['Similar_item_id'].explode()
.map(dict(zip(df['Id.'], df['Item.'])))
.groupby(level=0).agg(list)
)
df
:
Id. Item. Similar_item_id similar_item
0 1.0 Pen. [2, 1] [Book., Pen.]
1 2.0 Book. [1, 4] [Pen., Laptop.]
2 3.0 Phone. 4 [Laptop.]
3 4.0 Laptop. 3 [Phone.]
或有条件地基于长度:
df['similar_item'] = (
df['Similar_item_id'].explode()
.map(dict(zip(df['Id.'], df['Item.'])))
.groupby(level=0).agg(lambda g: list(g) if len(g) > 1 else g)
)
Id. Item. Similar_item_id similar_item
0 1.0 Pen. [2, 1] [Book., Pen.]
1 2.0 Book. [1, 4] [Pen., Laptop.]
2 3.0 Phone. 4 Laptop.
3 4.0 Laptop. 3 Phone.
DataFrame 构造函数:
import pandas as pd
df = pd.DataFrame(
'Id.': [1.0, 2.0, 3.0, 4.0],
'Item.': ['Pen.', 'Book.', 'Phone.', 'Laptop.'],
'Similar_item_id': [[2, 1], [1, 4], 4, 3]
)
【讨论】:
【参考方案2】:试试这样的,没有爆炸快,但更容易理解
df['out'] = df.Similar_item_id.\
apply(lambda x : df.set_index('Id.').loc[x,'Item.'].tolist()
if type(x)==list
else df.set_index('Id.').loc[x,'Item.'] )
0 [Book., Pen.]
1 [Pen., Laptop.]
2 Laptop.
3 Phone.
Name: Similar_item_id, dtype: object
【讨论】:
以上是关于根据数据框中的其他行值创建列的主要内容,如果未能解决你的问题,请参考以下文章
PySpark - 如何根据列中的两个值从数据框中过滤出连续的行块