如何在多级索引的Pandas数据帧中获取随机样本?

3
我有一个数据框,它按以下变量进行索引:名称-日期。名称是某种奇怪的ID,而日期是...日期。
数据非常大,我想为几个随机选择的名称检查我拥有的数据。
也就是说,
1. 从可能的名称中随机选择一个名称 2. 按时间顺序检查此名称的数据。
我不知道如何做到这一点。我看到我们可以使用get_level_values,但我没有特定的名称在脑海中,我只想多次调用随机样本。
任何帮助都将不胜感激!谢谢!

1
它是多索引还是以“名称-日期”形式的索引? - James
这是一个多索引 df=set_index(['name','date']) - ℕʘʘḆḽḘ
2个回答

2
import pandas as pd
import numpy as np
import random
import string

df = pd.DataFrame(data={'NAME': [''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(17)) for _ in range(10)],
            'Date': pd.date_range('1/01/2016', periods=10),
            'Whatever': np.random.randint(20, 50, 10)},
                  columns=['NAME', 'Date', 'Whatever']).set_index(['NAME', 'Date'])

random_df = df[df.index.get_loc(np.random.choice(df.index.levels[0])) == True].sort_index(level=1)
print(random_df)

返回一个如下所示的df:
                              Whatever
NAME              Date                
xg71zOEQVOEfCZ2ne 2016-01-01        35
qLCXuEerCXi6gmF1Y 2016-01-02        26
0vDe7x8TIb5FRv7hV 2016-01-03        40
Ddc6FGKBdtcLqT53O 2016-01-04        31
IYcrKG9pjt7mHH3qn 2016-01-05        44
lAWObNTC8yXPMY3v5 2016-01-06        49
k90QWdPc5qFSCFi1c 2016-01-07        22
BWQoHo8lUyEwK9Nuf 2016-01-08        42
Xt0bxUerTan0i1eGw 2016-01-09        22
tc7PYCzpyGmYLbnxu 2016-01-10        46

一个像这样的random_df:
                              Whatever
NAME              Date                
IYcrKG9pjt7mHH3qn 2016-01-05        44

1
你可以忘记你的多重索引,只需使用isinsample:
import random
df = df.reset_index()
df[df['NAME'].isin(random.sample(list(df['NAME'].unique()),5))]

谢谢@maxymoo!我有一个问题。你的代码不完全符合我的需求,对吧?df['NAME'].sample(5)只是获取了一个随机的包含可能不同名称的5行样本。相反,我想从数据中抽取一个单一的名称...并且可能保持多索引结构。 - ℕʘʘḆḽḘ
有太多的名称,它们没有意义(比如IDigfvruhncfd7654)。因此需要随机获取其中一个。 - ℕʘʘḆḽḘ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接