我有一个熊猫数据框和一个列表 -
d={'abc':[0,2,4,5,2,2],'bec':[0,5,6,4,0,2],'def':[7,6,0,1,1,2],'rtr':[5,6,7,2,0,3],'rwr':[5,6,7,1,0,5],'xx':[4,5,6,7,8,7]}
X=pd.DataFrame(d)
abc bec def rtr rwr xx
0 0 0 7 5 5 4
1 2 5 6 6 6 5
2 4 6 0 7 7 6
3 5 4 1 2 1 7
4 2 0 1 0 0 8
5 2 2 2 3 5 7
l=[ 'bec','def','cef','ghd','rtr','fgh','ewr']
现在我想通过以下方式将列表附加到数据框-
对于数据帧中的每一行 - 我们计算其中非零元素的数量(假设第一行是 3 个)
我们取 3=1.5 的 50%(四舍五入为 1),然后将列表 l 中的许多元素附加到行中(从头开始)。对于第一行,它是“bec”,因为“bec”已经存在于 行,我们将其计数增加 1。
如果列表中的元素不存在于数据框中,我们将其附加到末尾。
试运行-
对于第 1 行(索引 1)- 非零元素的数量是 6。所以 50% 是 3。所以我们从列表 ['bec','def','cef'] 中取出前 3 个元素。 'bec' 已经存在,所以它的计数增加 1,变成 (2,2)=6。 类似地,存在“def”,因此它变为(2,3)=7。 'cef' 不存在于数据框中,因此我们添加它并将计数设为 1。
最终输出看起来像这样-
abc bec def rtr rwr xx cef
0 0 1 8 5 5 4 0
1 2 6 7 6 6 5 1
2 4 7 1 7 7 6 0
3 5 5 2 2 1 7 1
4 2 1 1 0 0 8 0
5 2 1 1 3 5 7 1
答案 0 :(得分:2)
我们可以使用 ne
+ sum
沿着 axis=1
来计算每行中的非零值,然后是 floordiv
和 2
只考虑{ {1}} 个这些计数,接下来在列表推导式中的 50%
方法的帮助下创建一个记录列表,现在创建一个数据框让我们从这些记录中说 dict.fromkeys
和 y
用 add
得到想要的结果
X
y = pd.DataFrame(dict.fromkeys(l[:i], 1)
for i in X.ne(0).sum(1).floordiv(2).astype(int))
X.add(y.fillna(0), fill_value=0).astype(int)