使用熊猫数据框列和单元格填充请求

时间:2020-04-07 20:01:07

标签: python pandas

我有一个这样的数据框:

    userName  _2643698_1  _2643699_1  _2643700_1  _2643701_1  _2643702_1  
    _test2         5.0         4.8        3.75         3.6         2.2   
    _test3         4.0         5.0        4.40         5.0         5.0   
    _test4         5.0         4.4        5.00         5.0         4.0

三个唯一用户,与该用户对应的5个唯一列以及每个列/每个用户的唯一分数。 我需要使用以下逻辑将这些数据输入到补丁请求中:

每个用户名,用该用户的分数更新每个键(列标题)。

示例:

patch = change_data(userName, colId, score)

目标是为所有三个用户更新数据,每个用户在相同的5列中都有一个分数(列标题为_263698_1,用户在该列中具有该分数)。

我要处理的真实数据集有78个用户和14个唯一列,每个用户都有得分。

我一直在网上建议许多选项,以尽可能高效地获取所需的逻辑,任何建议将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:1)

使用melt()

new_df = pd.melt(id_vars='userName', 
                 var_name='colId', 
                 value_vars=[c for c in df.columns if c != 'userName']
         )

所以new_df看起来像这样

   userName       colId  value
0    _test2  _2643698_1   5.00
1    _test3  _2643698_1   4.00
2    _test4  _2643698_1   5.00
3    _test2  _2643699_1   4.80
4    _test3  _2643699_1   5.00
5    _test4  _2643699_1   4.40
6    _test2  _2643700_1   3.75
7    _test3  _2643700_1   4.40
8    _test4  _2643700_1   5.00
9    _test2  _2643701_1   3.60
10   _test3  _2643701_1   5.00
11   _test4  _2643701_1   5.00
12   _test2  _2643702_1   2.20
13   _test3  _2643702_1   5.00
14   _test4  _2643702_1   4.00

然后,您可以遍历new_df并在每一行上调用change_data

for row in new_df.itertuples(index=False):
    patch = change_data(row.userName, row.colId, row.value)
    # do something with patch