【发布时间】:2019-08-19 06:39:08
【问题描述】:
我在使用 pandas 数据框时需要一些帮助。 这是数据框:
group col1 col2 name
1 dog 40 canidae
1 dog 40 canidae
1 dog 40 canidae
1 dog 40 canidae
1 dog 40
1 dog 40 canidae
1 dog 40 canidae
2 frog 85 dendrobatidae
2 frog 89 leptodactylidae
2 frog 89 leptodactylidae
2 frog 82 leptodactylidae
2 frog 89
2 frog 81
2 frog 89 dendrobatidae
3 horse 87 equidae1
3 donkey 76 equidae2
3 zebra 67 equidae3
4 bird 54 psittacidae
4 bird 56
4 bird 34
5 bear 67
5 bear 54
我想要的是添加一列“consensus_name”并获取:
group col1 col2 name consensus_name
1 dog 40 canidae canidae
1 dog 40 canidae canidae
1 dog 40 canidae
1 dog 40 canidae canidae
1 dog 40 canidae canidae
2 frog 85 dendrobatidae leptodactylidae
2 frog 89 leptodactylidae leptodactylidae
2 frog 89 leptodactylidae leptodactylidae
2 frog 82 leptodactylidae leptodactylidae
2 frog 89 leptodactylidae
2 frog 81 leptodactylidae
2 frog 89 dendrobatidae leptodactylidae
3 horse 87 equidae1 equidae3
3 donkey 76 equidae2 equidae3
3 zebra 67 equidae3 equidae3
4 bird 54 psittacidae psittacidae
4 bird 56 psittacidae
4 bird 34 psittacidae
5 bear 67 NA
5 bear 54 NA
为了得到每个组的这个新列,我得到了最能代表该组的名称。
对于
group1,有 4 行名称为'canidae',而其中一行没有,因此我在consensus_name列中写下每一行'canidae'对于
group2,有 2 行名称为'dendrobatidae',2 行没有任何内容,3 行名称为'leptodactylidae',因此对于每一行,我在consensus_name列中写下 'leptodactylidae'.对于
group3,有3行不同的名字,所以因为没有一致意见,我得到的名字是最小的col2数字,所以我在@987654335列写'equidae3'@。对于第4组只有一行有信息,所以是
group4的consensus_name,所以我在consensus_name列写psittacidae。对于
group5没有任何信息,则只需在consensus_name列中写入NA。
有没有人想用 pandas 来做这件事?感谢您的帮助:)
anky = 的输出
group col1 col2 name consensus_name
0 1 dog 40 canidae canidae
1 1 dog 40 canidae canidae
2 1 dog 40 canidae canidae
3 1 dog 40 canidae canidae
4 1 dog 40 NaN canidae
5 1 dog 40 canidae canidae
6 1 dog 40 canidae canidae
7 2 frog 85 dendrobatidae dendrobatidae
8 2 frog 89 leptodactylidae leptodactylidae
9 2 frog 89 leptodactylidae leptodactylidae
10 2 frog 82 leptodactylidae leptodactylidae
11 2 frog 89 NaN leptodactylidae
12 2 frog 81 NaN leptodactylidae
13 2 frog 89 dendrobatidae dendrobatidae
14 3 horse 87 equidae1 equidae1
15 3 donkey 76 equidae2 equidae2
16 3 zebra 67 equidae3 equidae3
17 4 bird 54 psittacidae psittacidae
18 4 bird 56 NaN psittacidae
19 4 bird 34 NaN psittacidae
20 5 bear 67 NaN NaN
21 5 bear 54 NaN NaN
【问题讨论】:
-
df['consensus_name']=df.groupby(['group','col1'])['name'].apply(lambda x:x.ffill().bfill())?? -
@anky_91 你好,谢谢,但我对
equidae3(group3) 没有达成共识,我应该得到col2值最低的名称。而在 group2 中,并非所有个人都有共识名称leptodactylidae,13行保留了dendrobatidae名称... -
当您要求在 R 中找到解决方案时,为什么这个问题会被 Python 和 pandas 标记?
-
@Guybrush 这是我的错误,抱歉。
标签: python python-3.x pandas pandas-groupby