pandas 创建新列基于值列aMap到列b获取列c

lrl1mhuk  于 2023-02-11  发布在  其他
关注(0)|答案(2)|浏览(108)

我有这样一个 Dataframe :
| 努姆|正文|外来的|
| - ------|- ------|- ------|
| 1个|美国广播公司|四个|
| 第二章|碱性催化分解|1个|
| 三个|电子重力仪|三个|
| 四个|杰克尔|第二章|
| 四个|杰克尔|1个|
我想使新列基于'foreign'列与'id'列匹配,并获得'text'列。因此,我期待:
| 努姆|正文|外来的|外文文本|
| - ------|- ------|- ------|- ------|
| 1个|美国广播公司|四个|杰克尔|
| 第二章|碱性催化分解|1个|美国广播公司|
| 三个|电子重力仪|三个|碱性催化分解|
| 四个|杰克尔|第二章|电子重力仪|
| 四个|杰克尔|1个|美国广播公司|
如何语法使'foreign_txt'?我不能删除任何行。我忘记如何做了。你能帮助我吗?

sqyvllje

sqyvllje1#

Series.map与由DataFrame.set_index创建的Series一起使用:

df['foreign_txt'] = df['foreign'].map(df.set_index('id')['text'])
print (df)
   id text  foreign foreign_txt
0   1  abc        4         jkl
1   2  bcd        1         abc
2   3  efg        3         efg
3   4  jkl        2         bcd

或者:

df = (df.merge(df.drop('foreign', axis=1)
                .rename(columns={'id':'foreign', 'text':'foreign_txt'}), how='left'))

编辑:如果需要text乘以id的第一个值,则添加DataFrame.drop_duplicates,以避免删除每个id的唯一文本(聚合join):
一个二个一个一个

qxgroojn

qxgroojn2#

您可以应用map方法..!

    • 代码:**
import pandas as pd

data = {'num': [1, 2, 3, 4,4],
        'text': ['abc', 'bcd', 'efg', 'jkl','jkl'],
        'foreign': [4, 1, 3, 2,1]}

df = pd.DataFrame(data)
foreign_dict = df.set_index('num')['text'].to_dict()
#print(foreign_dict)  #{1: 'abc', 2: 'bcd', 3: 'efg', 4: 'jkl'}
df['foreign_txt'] = df['foreign'].map(foreign_dict) 

print(df)
    • 输出:**
num text  foreign foreign_txt
0    1  abc        4         jkl
1    2  bcd        1         abc
2    3  efg        3         efg
3    4  jkl        2         bcd
4    4  jkl        1         abc

相关问题