Python 删除一列中的重复并迭代行以折叠到第二列中
我正在寻找一种方法来生成一些关于我的模型预测的统计数据。 左边是真值,右边是预测。 我的真实值是在一个区间内,所以我想将它们压缩成每个区间的单个值,并知道做出了哪些预测。 我想我需要对第一列执行类似于“uniq”的操作,并迭代第二列的每一行,直到第一列中的值发生变化。 我可以想象,awk会非常擅长使用$1和$2来处理列,但第二列的迭代不会丢失第一列中的信息,这正是我所陷入的困境。值得注意的是,第一列中的值可能出现多次,我希望它们在每个间隔中重复,而不是按顺序重复。 我可以接受shell或python中的任何代码 输入示例:Python 删除一列中的重复并迭代行以折叠到第二列中,python,bash,shell,awk,Python,Bash,Shell,Awk,我正在寻找一种方法来生成一些关于我的模型预测的统计数据。 左边是真值,右边是预测。 我的真实值是在一个区间内,所以我想将它们压缩成每个区间的单个值,并知道做出了哪些预测。 我想我需要对第一列执行类似于“uniq”的操作,并迭代第二列的每一行,直到第一列中的值发生变化。 我可以想象,awk会非常擅长使用$1和$2来处理列,但第二列的迭代不会丢失第一列中的信息,这正是我所陷入的困境。值得注意的是,第一列中的值可能出现多次,我希望它们在每个间隔中重复,而不是按顺序重复。 我可以接受shell或pyth
1 1
1 0
1 1
2 2
2 2
1 1
3 3
3 3
3 2
3 3
2 3
2 2
2 1
示例输出:
1 1 0 1
2 2 2
1 1
3 3 3 2 3
2 3 2 1
使用awk非常简单:
awk 'NR>1{cr="\n"}L!=$1{printf "%s%s ",cr,$1;L=$1}{printf " %s" ,$2}END{print ""}' input
结果
1 1 0 1
2 2 2
1 1
3 3 3 2 3
2 3 2 1
解释
NR>1{cr=“\n”}
:cr
或回车:在处理第一条记录之前将为空(NR>1
)
L=$1{printf“%s%s”,cr,$1;L=$1}
:如果L
最后一个键与当前($1
)不同,它会打印当前键$1
的cr(第一条记录为null),并将其值存储在L
中,作为最后一个处理的键
{printf“%s”,$2}
:只显示每条记录的第二列
END{print”“}
:在处理所有记录时打印最终回车 使用awk非常简单:
awk 'NR>1{cr="\n"}L!=$1{printf "%s%s ",cr,$1;L=$1}{printf " %s" ,$2}END{print ""}' input
结果
1 1 0 1
2 2 2
1 1
3 3 3 2 3
2 3 2 1
解释
NR>1{cr=“\n”}
:cr
或回车:在处理第一条记录之前将为空(NR>1
)
L=$1{printf“%s%s”,cr,$1;L=$1}
:如果L
最后一个键与当前($1
)不同,它会打印当前键$1
的cr(第一条记录为null),并将其值存储在L
中,作为最后一个处理的键
{printf“%s”,$2}
:只显示每条记录的第二列
END{print”“}
:在处理所有记录时打印最终回车 下面是bash中的一个版本:
#/bin/bash
while read a b; do
if [ $a != "$val" ]; then
[ -n "$val" ] && echo $val $pred
val=$a
pred=$b
else
pred="$pred $b"
fi
done <inputfile
[ -n "$val" ] && echo $val $pred
#/bin/bash
读a读b;做
如果[$a!=“$val”];然后
[-n“$val”]&回送$val$pred
瓦尔=一美元
pred=$b
其他的
pred=“$pred$b”
fi
完成下面是bash中的一个版本:
#/bin/bash
while read a b; do
if [ $a != "$val" ]; then
[ -n "$val" ] && echo $val $pred
val=$a
pred=$b
else
pred="$pred $b"
fi
done <inputfile
[ -n "$val" ] && echo $val $pred
#/bin/bash
读a读b;做
如果[$a!=“$val”];然后
[-n“$val”]&回送$val$pred
瓦尔=一美元
pred=$b
其他的
pred=“$pred$b”
fi
到目前为止你想到了什么?到目前为止你想到了什么?谢谢你的精彩解释!很有魅力。谢谢你的解释!工作起来很有魅力。