我有两个数据帧和一个相当棘手的连接要完成.

第一个数据帧:

data = [[0, 'Standard1', [100, 101, 102]], [1, 'Standard2', [100, 102]], [2, 'Standard3', [103]]]
 
df1 = pd.DataFrame(data, columns = ['RuleSetID', 'RuleSetName', 'KeyWordGroupID'])
df1 

Output:

RuleSetID   RuleSetName    KeyWordGroupID
    0         Standard1    [100, 101, 102]
    1         Standard2    [100, 102]
    2         Standard3    [103]
   ...         ...          ... 

第二个:

data = [[100, 'verahren', ['word1', 'word2']], 
        [101, 'flaechen', ['word3']], 
        [102, 'nutzung', ['word4', 'word5']],
        [103, 'ort', ['word6', 'word7']]]
 
df2 = pd.DataFrame(data, columns = ['KeyWordGroupID', 'KeyWordGroupName', 'KeyWords'])
df2

Output:

KeyWordGroupID  KeyWordGroupName    KeyWords
    100               verahren      ['word1', 'word2']
    101               flaechen      ['word3']
    102               nutzung       ['word4', 'word5']
    103               ort           ['word6', 'word7']
    ...               ...            ...

所需的输出:

RuleSetID   RuleSetName    KeyWordGroupID
    0         Standard1    [['word1', 'word2'], ['word3'], ['word4', 'word5']]
    1         Standard2    [['word1', 'word2'], ['word4', 'word5']]
    2         Standard3    [['word6', 'word7']]

我try 使用df.to_dict('records')将第二个数据帧转换成字典,并将其放入用户定义的函数中,通过键值进行匹配,但这似乎不是一种干净的方法.

有人有办法解决这个问题吗?任何 idea 都会得到回报.

推荐答案

其主要思想是将df2转换为dict映射Series,其中keyKeyWordGroupID列,valueKeyWords列.

您可以使用explodeKeyWordGroupID列(df1map)展平到df2,然后再使用groupby来reshape 第一个数据帧:

df1['KeyWordGroupID'] = (
    df1['KeyWordGroupID'].explode().map(df2.set_index('KeyWordGroupID')['KeyWords'])
                         .groupby(level=0).apply(list)
)
print(df1)

# Output
   RuleSetID RuleSetName                             KeyWordGroupID
0          0   Standard1  [[word1, word2], [word3], [word4, word5]]
1          1   Standard2           [[word1, word2], [word4, word5]]
2          2   Standard3                           [[word6, word7]]

Python相关问答推荐

两极按组颠倒顺序

云上Gunicorn的Flask-socketIO无法工作

在后台运行的Python函数

使用Python和PRNG(不是梅森龙卷风)有效地生成伪随机浮点数在[0,1)中均匀?

替换字符串中的点/逗号,以便可以将其转换为浮动

Pydantic:如何将对象列表表示为dict(将列表序列化为dict)

在for循环中仅执行一次此操作

Pandas 在最近的日期合并,考虑到破产

通过Selenium从页面获取所有H2元素

大小为M的第N位_计数(或人口计数)的公式

PyQt5,如何使每个对象的 colored颜色 不同?'

无法在Docker内部运行Python的Matlab SDK模块,但本地没有问题

如何根据一列的值有条件地 Select 前N个组,然后按两列分组?

将JSON对象转换为Dataframe

如何使用scipy的curve_fit与约束,其中拟合的曲线总是在观测值之下?

如果满足某些条件,则用另一个数据帧列中的值填充空数据帧或数组

如何保持服务器发送的事件连接活动?

将pandas导出到CSV数据,但在此之前,将日期按最小到最大排序

如何在两列上groupBy,并使用pyspark计算每个分组列的平均总价值

为什么Python内存中的列表大小与文档不匹配?