如何在多索引 pandas 数据框中获取随机样本?
how to get a random sample in a multiindex pandas dataframe?
我有一个根据以下变量编制索引的数据框:名称 - 日期。姓名是某种奇怪的 ID,日期是..日期。
数据非常大,我想检查一下我有几个随机选择的 NAME 的数据。
即
- 从可能的名字中随机选择一个名字
- 检查此 NAME 的数据,按时间排序。
我不知道该怎么做。我看到我们可以使用 get_level_values
,但我没有具体的名称,我只想多次调用随机样本。
感谢任何帮助!
谢谢!
您可以忘记您的 multi-index,只需使用 isin
和 sample
:
import random
df = df.reset_index()
df[df['NAME'].isin(random.sample(list(df['NAME'].unique()),5))]
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)
Returns 一个 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
我有一个根据以下变量编制索引的数据框:名称 - 日期。姓名是某种奇怪的 ID,日期是..日期。
数据非常大,我想检查一下我有几个随机选择的 NAME 的数据。
即
- 从可能的名字中随机选择一个名字
- 检查此 NAME 的数据,按时间排序。
我不知道该怎么做。我看到我们可以使用 get_level_values
,但我没有具体的名称,我只想多次调用随机样本。
感谢任何帮助! 谢谢!
您可以忘记您的 multi-index,只需使用 isin
和 sample
:
import random
df = df.reset_index()
df[df['NAME'].isin(random.sample(list(df['NAME'].unique()),5))]
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)
Returns 一个 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