在datafram列中的任何值上合并

2024-10-02 02:24:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试合并下面的“单位”列中的任何列

from pandas import DataFrame
import pandas as pd 
import difflib

df1 = DataFrame([[1,'034567','Foo'],
                 [2,'1cd2346','Bar']], 
                columns=['UID','Unit','Name'])

df2 = DataFrame([['SellTEST','0ab1234567,034567'],
                 ['superVAR','1cd2346']], 
                columns=['Seller', 'Unit'])

merge2_df = pd.merge(df1, df2, on=['Unit'], how='left')
merge2

这将产生一个NaN值:

    UID     Unit    Name    Seller
0   1     034567    Foo     NaN
1   2     1cd2346   Bar     superVAR

当我想看到的是:

    UID     Unit    Name    Seller
0   1     034567    Foo     SellTEST
1   2     1cd2346   Bar     superVAR

我正在从CSV导入数据,因此,某些字段将包含多个“Unit”值。理想情况下,我希望能够在合并过程中处理这个问题。有什么建议吗


Tags: columnsnameimportdataframepandasuidfoobar
1条回答
网友
1楼 · 发布于 2024-10-02 02:24:14

您需要将Unit数据拆分为df2中的单数行。例如,0ab1234567,034567行将进入行。在此之后,您可以应用pd.merge

In [112]: df2split = pd.DataFrame(df2['Unit'].str.split(',').tolist(),
                                  index=df2['Seller']).stack()

In [113]: df2split = df2split.reset_index()[[0, 'Seller']]

In [114]: df2split.columns = ['Unit', 'Seller']

In [115]: df2split
Out[115]:
         Unit    Seller
0  0ab1234567  SellTEST
1      034567  SellTEST
2     1cd2346  superVAR

In [116]: pd.merge(df1, df2split, on=['Unit'], how='left')
Out[116]:
   UID     Unit Name    Seller
0    1   034567  Foo  SellTEST
1    2  1cd2346  Bar  superVAR

相关问题 更多 >

    热门问题