在这个小数据帧:如何使用lambda表达式合并两个计数值?
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在一个线和输出把由F2分离F1值用逗号
我们可以离开F1和F2放弃这不是一个大问题。
M1 M2
pos
0 23 2,1 1,0
1 24 3,3 1,1
2 28 1,2 0,1
我试图用加入,但失败了,然后追加(其中din't工作,因为我正好预期):
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
任何输入与解释,请。
谢谢,
你是怎么得到'3,3 1,1'的?它不是应该是'3,0,0'还是'3,0 1,0'? – DyZ
哎呀,这应该是一个错字。我将不得不纠正它 – everestial007
@DYZ:其实没有错别字。我刚刚更新了** F1和F2 **的计数以使问题更清楚。你能看看吗? – everestial007