Python 为单行指定多个值
我有一个熊猫数据框 用户ID 用户名 用户声誉 答案的数目 问题数量 徽章名称 警徽猫 0 1. 艾哈迈德·阿尼斯 123 2. 3. 托普 HTML 1. 1. 艾哈迈德·阿尼斯 123 2. 3. 程序员 随机的Python 为单行指定多个值,python,pandas,Python,Pandas,我有一个熊猫数据框 用户ID 用户名 用户声誉 答案的数目 问题数量 徽章名称 警徽猫 0 1. 艾哈迈德·阿尼斯 123 2. 3. 托普 HTML 1. 1. 艾哈迈德·阿尼斯 123 2. 3. 程序员 随机的 我想您正在寻找设置索引: cols = ["USER_ID", "USER_NAME", "USER_REPUTATION", "NUMBER_OF_ANSWERS", "NUMBER_OF_
我想您正在寻找
设置索引
:
cols = ["USER_ID", "USER_NAME", "USER_REPUTATION", "NUMBER_OF_ANSWERS", "NUMBER_OF_QUESTIONS"]
ndf = df.set_index(cols)
使用一些示例数据:
>>> df
A B C D E
0 one A foo 0.945847 -0.561259
1 one A foo 0.579520 0.130518
2 one A foo -0.683629 -1.084639
3 one A bar -0.168223 -0.311991
4 one B bar 0.007965 1.108121
5 one B bar -1.877323 -0.258055
6 one B bar 0.992160 0.192339
7 one B foo -0.421557 -0.805156
8 two C bar -0.346622 1.335197
9 two C foo -0.979483 -1.382465
10 two C bar -0.815332 -1.491385
11 two C foo -2.112730 -0.331574
>>> cols = ["A", "B", "C"]
>>> ndf = df.set_index(cols)
>>> ndf
D E
A B C
one A foo 0.945847 -0.561259
foo 0.579520 0.130518
foo -0.683629 -1.084639
bar -0.168223 -0.311991
B bar 0.007965 1.108121
bar -1.877323 -0.258055
bar 0.992160 0.192339
foo -0.421557 -0.805156
two C bar -0.346622 1.335197
foo -0.979483 -1.382465
bar -0.815332 -1.491385
foo -2.112730 -0.331574
ndf
现在是一个多索引帧
为了使
D
和E
与A
、B
和C
处于同一级别,我们可以将索引设置为所有这些索引,以便于显示:
the_df = df.set_index(["A", "B", "C", "D", "E"])
获取(例如,在IPython笔记本中)
请注意,如果要在控制台中查看此项:
>>> the_df
Empty DataFrame
Columns: []
Index: [(one, A, foo, 0.945847, -0.561259), (one, A, foo, 0.57952, 0.130518), ...]
因为我们将所有内容都设置为索引,而值中没有任何内容!但是如果您也希望在控制台中看到它,一个技巧是使用“ghost”列,即名称和值为空字符串“”
:
删除HTML中额外的第一行:
from bs4 import BeautifulSoup
# form the soup
soup = BeautifulSoup(the_df.to_html())
# find the first row and remove it
soup.find("tr").extract()
# get HTML back
html = str(soup)
你想要
df.drop_duplicates()
?不,我想要一些与多索引相关的东西。我已经编辑了这篇博文,这更合适、更正确。第一件事,如果你看到D和E在A B C上面1行,那么我们能把它们放在同一个级别上,并得到结果吗?@AhmadAnis当然,可以通过将所有列名设置为索引来实现。编辑了答案。它在索引顶部添加了一个额外的行,当我用HTML呈现它时,我可以看到它。@AhmadAnis我明白了,如果你有BeautifulSoup,我添加了一种在HTML中删除它的方法。现在效果非常好
from bs4 import BeautifulSoup
# form the soup
soup = BeautifulSoup(the_df.to_html())
# find the first row and remove it
soup.find("tr").extract()
# get HTML back
html = str(soup)