将列表附加到数据框并添加计数

时间:2021-05-02 10:35:09

标签: python pandas dataframe

我有一个熊猫数据框和一个列表 -

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

1 个答案:

答案 0 :(得分:2)

我们可以使用 ne + sum 沿着 axis=1 来计算每行中的非零值,然后是 floordiv2 只考虑{ {1}} 个这些计数,接下来在列表推导式中的 50% 方法的帮助下创建一个记录列表,现在创建一个数据框让我们从这些记录中说 dict.fromkeysyadd 得到想要的结果

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)
相关问题