我有一个这样的数据框:
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个唯一列,每个用户都有得分。
我一直在网上建议许多选项,以尽可能高效地获取所需的逻辑,任何建议将不胜感激。
谢谢。
答案 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