我有一个这样的数据框:
以pd格式导入熊猫,以np格式导入numpy
Out[10]:
samples subject trial_num
0 [0 2 2 1 1
1 [3 3 0 1 2
2 [1 1 1 1 3
3 [0 1 2 2 1
4 [4 5 6 2 2
5 [0 8 8 2 3
我想要这样的输出:
samples subject trial_num frequency
0 [0 2 2 1 1 2
1 [3 3 0 1 2 2
2 [1 1 1 1 3 1
3 [0 1 2 2 1 3
4 [4 5 6 2 2 3
5 [0 8 8 2 3 2
这里的频率是每个样本的每个列表中唯一值的数量。例如,[0, 2, 2]
只有一个唯一值。
我可以在没有列表的情况下在熊猫中执行唯一值,也可以使用for循环实现它以遍历每一行并访问每个列表和....但是我想要一种更好的熊猫方法。
谢谢。
您可以使用collections.Counter
该任务:
from collections import Counter
df['frequency'] = df['samples'].apply(lambda x: sum(v==1 for v in Counter(x).values()))
print(df)
印刷品:
samples subject trial_num frequency
0 [0, 2, 2] 1 1 1
1 [3, 3, 0] 1 2 1
2 [1, 1, 1] 1 3 0
3 [0, 1, 2] 2 1 3
4 [4, 5, 6] 2 2 3
5 [0, 8, 8] 2 3 1
编辑:对于更新的问题:
df['frequency'] = df['samples'].apply(lambda x: len(set(x)))
print(df)
印刷品:
samples subject trial_num frequency
0 [0, 2, 2] 1 1 2
1 [3, 3, 0] 1 2 2
2 [1, 1, 1] 1 3 1
3 [0, 1, 2] 2 1 3
4 [4, 5, 6] 2 2 3
5 [0, 8, 8] 2 3 2
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句