gpt4 book ai didi

python - 如何使用一个带有 lambda 的表达式合并两个计数值?

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:41 24 4
gpt4 key购买 nike

在这个小数据框中:

d1 = pd.read_csv('to_count.mcve.txt', sep='\t')

pos M1 M2 F1 F2
23 A,B,A,C,D A,C,B A D
24 A,B,B,C,B A,B,A B D
28 C,B,C,D,E B,C E D

我想计算F1和F2中的值有多少在M1和M2中。作为一个学习过程,我将其分解为多个部分。

我能做到:

d1_count = d1.apply(lambda x: x.loc[::].str.count(x.F1), 1)

输出:

        M1  M2  F1  F2
pos
0 23 2 1 1 0
1 24 3 1 1 1
2 28 1 0 1 0

同样,

d2_count = d1.apply(lambda x: x.loc[::].str.count(x.F2), 1)

输出:

       M1  M2  F1  F2
pos
0 23 1 0 0 1
1 24 3 1 1 1
2 28 2 1 0 1

但是,我想要以下最终预期输出:

我想在一行中计算 F1 和 F2,并输出将 F1 值用 F2 用逗号分隔

我们可以通过删除将 F1 和 F2 排除在外,这不是一个大问题。

         M1    M2    
pos
0 23 2,1 1,0
1 24 3,3 1,1
2 28 1,2 0,1

我尝试使用 join 但失败了,然后追加(这没有像我预期的那样工作):

d3_count = d1.apply(lambda x: x.loc[::].str.count(x.F1).append(x.loc[::].str.count(x.F2)), 1)

M1 M2 F1 F2 M1 M2 F1 F2
pos
0 23 2 1 1 0 1 0 0 1
1 24 3 1 1 1 3 1 1 1
2 28 1 0 1 0 2 1 0 1

请提供任何带有解释的输入。

谢谢

最佳答案

我愿意这个;首先,将 pos 设置为索引,以将其从所有进一步的操作中消除:

d1.set_index('pos', inplace=True)

如果你愿意,你可以稍后使用 reset_index() 。现在,找到计数,将它们转换为字符串,然后“添加”:

d1.apply(lambda x: x[['M1','M2']].str.count(x.F1), 1).astype('str') +\
"," +\
d1.apply(lambda x: x[['M1','M2']].str.count(x.F2), 1).astype('str')
# M1 M2
#pos
#23 2,1 1,0
#24 3,0 1,0
#28 1,1 0,0

关于python - 如何使用一个带有 lambda 的表达式合并两个计数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42708579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com