使用一个dataframe中的列标题和值在另一个datafram中查找权重

2024-09-29 05:16:40 发布

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

我有两张如下表

    ID  param1  param2  param3
0  A12       2       1       1
1  B15       1       2       1
2  B20       2       2       1
...

以及

^{pr2}$

获取第一个dataframe,在第二个dataframe中查找每个参数的权重并返回如下所示的dataframe的最佳方法是什么?在

    ID  param1  param2  param3
0  A12      13      21      49
1  B15      10      39      49
2  B20      13      39      49

我想写一个给定参数和值的函数,子集表2如下所示, table2[(table2['parameter'] = parameter) & (table2['value'] = value)]并对表1中的每一列执行某种矢量化应用程序,但我不确定如何检查每个值并进行查找。在


Tags: 方法iddataframe参数parametervalueparam1权重
2条回答

一种选择是将table1转换为长格式,在参数和值上与table2合并,然后将其转换回宽格式:

In [85]: pd.merge(pd.melt(df1, id_vars='ID'), df2,
                  left_on=['variable', 'value'], right_on=['parameter', 'value']
                   ).pivot('ID', 'parameter', 'weight')
Out[85]:
parameter  param1  param2  param3
ID
A12            13      21      49
B15            10      39      49
B20            13      39      49

一番折腾之后,我想出了一个远不如“心灵世界”的东西。我只是说服自己发表文章,以提供一些见解,以获得相同的解决方案,不同的技术。在

In [55]: (df1.set_index('ID')
             .rename_axis('parameter', 1)
             .stack()
             .reset_index(name='value')
             .merge(df2)
             .set_index(['ID', 'parameter']).weight.unstack())
Out[55]:
parameter  param1  param2  param3
ID
A12            13      21      49
B15            10      39      49
B20            13      39      49

相关问题 更多 >