提取一个单元格的值以另一列的值为条件-Pandas/Python
我有一个数据帧,提取一个单元格的值以另一列的值为条件-Pandas/Python,python,pandas,group-by,Python,Pandas,Group By,我有一个数据帧,df,如下所示: Rank User 0 1690 samberman1212 1 1690 khogan3131 2 1690 narguero 3 1690 Awesemo 4 1690 Awesemo 5 1690 cptnspaulding 6 1690 Fluke7634 7 1690 giantsquid 8 1690 vidthekid22 9 1690
df
,如下所示:
Rank User
0 1690 samberman1212
1 1690 khogan3131
2 1690 narguero
3 1690 Awesemo
4 1690 Awesemo
5 1690 cptnspaulding
6 1690 Fluke7634
7 1690 giantsquid
8 1690 vidthekid22
9 1690 I_Slewfoot_U
10 1690 Mirage88
11 1690 Mirage88
12 1690 Mirage88
13 1690 Testosterown
14 1715 Anonymous
15 1715 Anonymous
我想使用每个用户在df
中的次数。
因此,我创建了一个新的数据帧,multiple
:
multiple=users_df.groupby("User").count()
print(multiple)
Rank
User
Anonymous 2
Awesemo 2
Fluke7634 1
I_Slewfoot_U 1
Mirage88 3
Testosterown 1
cptnspaulding 1
giantsquid 1
khogan3131 1
narguero 1
samberman1212 1
vidthekid22 1
最后,我想提取频率计数以将其分配给变量,count\u IP
:
for i, row in users_df.iterrows():
rank = row['Rank']
user = row['User']
count_IP= ???
因此,我希望能够在multiple
中查找此时循环中用户(user
)的计数值。。。我尝试:
multiple.query('User==user')['Rank']
#AND
multiple[multiple["User"]==user]["Rank"]
但是,这两种方法都不起作用。看起来用户列,即完成分组依据的变量,是不可调用的。因为当我询问列名时:
list(multiple.columns.values)
['Rank']
我怎样才能解决这个问题
更新:
假设我想要获得的不是频率计数,而是:
Rank User order of appearance
0 1690 samberman1212 1
1 1690 khogan3131 1
2 1690 narguero 1
3 1690 Awesemo 1
4 1690 Awesemo 2
5 1690 cptnspaulding 1
6 1690 Fluke7634 1
7 1690 giantsquid 1
8 1690 vidthekid22 1
9 1690 I_Slewfoot_U 1
10 1690 Mirage88 1
11 1690 Mirage88 2
12 1690 Mirage88 3
13 1690 Testosterown 1
14 1715 Anonymous 1
15 1715 Anonymous 2
更新#2:
我正在尝试使用更匿名的数据帧
ank User order of appearence
0 1 boggslite 1
1 2 dokcash 1
2 3 loumister35 1
3 4 drhass 1
4 5 onem4nwolfpack 1
5 6 felder15 1
6 7 TwoStix 1
7 8 Mwise120 1
8 9 sdchickens 1
9 10 tastefultides 1
10 11 bric75 1
11 12 ycmmat 1
12 13 tastefultides 1
13 14 mpgoldberg16 1
14 14 mpgoldberg16 2
15 16 Cicima6709 1
16 17 LSUTom123 1
17 18 bunglerprime 1
18 18 Testosterown 1
19 20 dfsteams 1
20 20 yankeesfan2 1
21 22 tfinnerty 1
22 23 bellmar21 1
23 24 Awesemo 1
24 25 shocky26 1
25 25 tastefultides 1
26 27 Thanks4DaChedda 1
27 28 isupol 1
28 28 jwestphal708 1
29 30 giantsquid 1
30 31 boggslite 1
31 32 Thanks4DaChedda 1
32 33 dre87 1
33 33 BlarneyBoys 1
34 33 bric75 1
35 36 ezellmt 1
36 36 Cicima6709 1
37 38 ivanage 1
38 38 Thanks4DaChedda 1
39 40 nevs2904 1
40 41 gridironguru999 1
41 42 Anonymous 1
42 43 Anonymous 1
43 44 Anonymous 1
44 45 Anonymous 1
45 45 Anonymous 2
46 47 Anonymous 1
47 48 Anonymous 1
48 49 Anonymous 1
49 50 Anonymous 1
IIUC您想使用
df.groupby()
如果要删除重复值,则可以执行df=df.drop_duplicates()
编辑外观顺序:
df['order of appearence']=df.groupby('User')['User'].transform(lambda x : x.duplicated().cumsum().add(1))
print(df)
Rank User order of appearence
0 1690 samberman1212 1
1 1690 khogan3131 1
2 1690 narguero 1
3 1690 Awesemo 1
4 1690 Awesemo 2
5 1690 cptnspaulding 1
6 1690 Fluke7634 1
7 1690 giantsquid 1
8 1690 vidthekid22 1
9 1690 I_Slewfoot_U 1
10 1690 Mirage88 1
11 1690 Mirage88 2
12 1690 Mirage88 3
13 1690 Testosterown 1
14 1715 Anonymous 1
15 1715 Anonymous 2
你想要什么还不清楚。你能解释一下吗?最好是预期结果。比如说,user=Mirage88。我只想让count_IP等于3。我的for循环将遍历
df
的所有行,并且有一个变量user,它接受该行用户名称的值。因此,我想从multiple
中提取计数,并将其分配给count\u IP。更清楚吗?除了频率计数之外,是否有可能获得外观顺序?除了没有相同排名的Anonymous
用户外,其他一切都正常。对于排名不同的Anonymous
,它的出现顺序从1开始。考虑到所有的匿名
,我想增加出现次数。不起作用,df[“外观顺序”]
的输出是相同的。它对我起作用。您是否添加了另一个名为匿名
的用户以及不同的排名和检查df[“外观顺序”]=df.groupby(['User','Rank'])['User'].transform(lambda x:x.duplicated().cumsum().add(1))
。将1716添加为匿名并选中Yes,我正在尝试使用更匿名的不同数据帧。我会把它放在更新部分的初始问题中,如果你能尝试一下,如果它有效的话,非常感谢
df['order of appearence']=df.groupby('User')['User'].transform(lambda x : x.duplicated().cumsum().add(1))
print(df)
Rank User order of appearence
0 1690 samberman1212 1
1 1690 khogan3131 1
2 1690 narguero 1
3 1690 Awesemo 1
4 1690 Awesemo 2
5 1690 cptnspaulding 1
6 1690 Fluke7634 1
7 1690 giantsquid 1
8 1690 vidthekid22 1
9 1690 I_Slewfoot_U 1
10 1690 Mirage88 1
11 1690 Mirage88 2
12 1690 Mirage88 3
13 1690 Testosterown 1
14 1715 Anonymous 1
15 1715 Anonymous 2