如何使用一个表达式与 lambda 合并两个计数值?
How to merge two count values using one expression with 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,并将 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()
如果你愿意,你可以稍后再去。现在,找到计数,将它们转换为字符串,然后 "add":
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
在这个小数据框中:
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()
如果你愿意,你可以稍后再去。现在,找到计数,将它们转换为字符串,然后 "add":
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