提问人:anna lordian 提问时间:7/23/2023 最后编辑:Markanna lordian 更新时间:9/26/2023 访问量:40
比较 pandas 数据框列并为相同的列提供相同的分数
Comparing pandas data frame columns and giving the same score to identical columns
问:
考虑一个包含 24 行的数据框。我需要比较所有列,对于相同的列,给出相同的分数。
例如,如果 column 与 column 和 相同,则它们都应该获得分数。pandas
A
C
F
1
然后,如果列与列相同,则它们将获得分数。
如果可能的话,我希望分数在所有行中都以新列的形式显示。
因此,例如,如果行获得了分数,则包含 24 行的新列将包含 24 次数字\字符串,每行一次B
Z
2
A
1
score_A
1
我尝试了几种策略。他们导致了不合逻辑的结果
答:
0赞
Mark
7/24/2023
#1
这是一种方法:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3],
'b': [4, 5, 6],
'c': [1, 2, 3],
'd': [7, 8, 9],
'e': [4, 5, 6],
'f': [1, 2, 3],
'g': [9, 10, 11]
})
seen = []
score = 1
for col in df.columns:
if not col in seen: # if the column is new to us
seen.append(col) # add it to the seen list
df['score_'+ col] = score # then add the score of it as a column to the df
for new_col in [c for c in df.columns if c not in seen]: # for every column that we haven't seen yet
if df[col].equals(df[new_col]): # if it is the same as our current column
df['score_'+ new_col] = score # then add a score column for it with the current score
seen.append(new_col)
score += 1
>>> df
a b c d e f g score_a score_c score_f score_b score_e score_d score_g
0 1 4 1 7 4 1 9 1 1 1 2 2 3 4
1 2 5 2 8 5 2 10 1 1 1 2 2 3 4
2 3 6 3 9 6 3 11 1 1 1 2 2 3 4
评论
0赞
anna lordian
7/25/2023
感谢您的帮助 - 我遇到了一个问题 - 我尝试过的代码遇到的相同问题,代码的结果是所有列都彼此不同。事实并非如此,实际上有很多身份
0赞
Mark
7/25/2023
对不起,你能为我改写一下吗?我不关注
0赞
anna lordian
7/25/2023
是的 - 问题在于代码的结果是所有列都彼此不同,即使事实并非如此。例如,如果 A 、 B 、 C 列相同并且需要获得相同的分数,则它们将获得不同的分数
0赞
Mark
7/25/2023
所以你是说我的代码在你的实际数据集上不起作用?从数据中提供实际示例以及预期的输出可能更简单
0赞
anna lordian
7/26/2023
我将在这里展示我的数据中的一个小样本和它所需的结果 df = pd。DataFrame(data={'set_1': [0.05, 0.05, 0.07, 0.15, 0.43, 0.2], 'set_2': [0.05, 0.05, 0.07, 0.15, 0.43, 0.2], 'set_3': [0.05, 0.05, 0.07, 0.15, 0.43, 0.2], 'set_4': [0.05, 0.05, 0.07, 0.15, 0.43, 0.2], 'set_5': [0.07, 0.07, 0.06, 0.1, 0.2, 0.3], 'set_6': [0.07, 0.07, 0.06, 0.1, 0.2, 0.3] }) 结果 sould be = [1,1,1,1,2,2]
0赞
anna lordian
7/27/2023
#2
大家好,感谢您的帮助。找到代码无法正常工作的原因。问题出在数据上。在句点后将它们四舍五入为两位数并将它们转换为字符串后,问题就解决了。
评论
A
C
C
C
C
D
A
C
D
C
D