我有个问题。我想调查我的假设是否正确,可以说receiver X
经常收到consignor Y
的邮件。为此,我将receiver
和consignor
分组。
然而,我现在想做的是,我想将所有receivers
输出给自己,其中最频繁的consignor
包含receiver
中所有m1n 6o1p的80%以上。
例如,我们有receiver c
,它从consignor 2, 3
收到了什么。consignor 2
仅1个数据包,consignor 3
4个数据包。因此,他总共收到了5个包。因此,consignor 3
接受receiver c
中所有consignor
的80%。因此receiver c
应在表中表示。这应该在下面为所有其他人完成。
简单地说,我希望所有receivers
都具有给定consignor
的80%以上。
我该怎么做?
我想要什么
receiver consignor count_with_most_consignor count_all
c 3 4 5
d 2 4 5
Dataframe
consignor receiver
0 1 a
1 2 a
2 1 a
3 2 c
4 3 c
5 1 b
6 3 c
7 3 c
8 3 c
9 2 d
10 2 d
11 2 d
12 1 d
13 2 d
密码
import pandas as pd
d = {'consignor': [1, 2, 1, 2, 3, 1, 3, 3, 3, 2, 2, 2, 1, 2],
'receiver': ['a', 'a', 'a', 'c', 'c', 'b', 'c', 'c', 'c', 'd', 'd', 'd', 'd', 'd']}
df = pd.DataFrame(data=d)
print(df)
df_ = df.groupby(['receiver','consignor']).size().reset_index(name='counts').sort_values(by=['counts'], ascending=False)
print(df_)
X = 'c'
print(df_[df_['receiver'] == X].shape[1])
print(df_[df_['receiver'] == X])
出来
[OUT]
3
receiver consignor counts
4 c 3 4
3 c 2 1
4条答案
按热度按时间fzwojiic1#
crosstab
后果
rkue9o1l2#
您只需使用
value_counts(normalize=True)
获取所有共享然后过滤
0.8
以上的值,例如:获取其余信息的最简单方法是分别计算它们
并将其连接在一起。
goucqfw63#
我只能想出这种棘手的方法:)
小时
woobm2wo4#
字典的简单解决方案如下:
输出: