- 首先,OP中的方法有效,但效率不高。由于数据集很长,它似乎可能永远运行。
- 使用
.groupby
的'method'
柱,营造dict
的DataFrames
独特'method'
的键的值,用dict-comprehension
。
.groupby
返回一个groupby
对象,该对象包含有关组的信息,其中g
是'method'
每个组的唯一值,并且d
是该DataFrame
组的。
- 的
value
每一个key
中df_dict
,将是一个DataFrame
,其可以以标准方式被访问,df_dict['key']
。
- 最初的问题想要的
list
是DataFrames
,可以使用来完成list-comprehension
df_list = [d for _, d in df.groupby('method')]
import pandas as pd
import seaborn as sns
df = sns.load_dataset('planets')
method number orbital_period mass distance year
0 Radial Velocity 1 269.300 7.10 77.40 2006
1 Radial Velocity 1 874.774 2.21 56.95 2008
2 Radial Velocity 1 763.000 2.60 19.84 2011
3 Radial Velocity 1 326.030 19.40 110.62 2007
4 Radial Velocity 1 516.220 10.50 119.47 2009
df_dict = {g: d for g, d in df.groupby('method')}
print(df_dict.keys())
[out]:
dict_keys(['Astrometry', 'Eclipse Timing Variations', 'Imaging', 'Microlensing', 'Orbital Brightness Modulation', 'Pulsar Timing', 'Pulsation Timing Variations', 'Radial Velocity', 'Transit', 'Transit Timing Variations'])
df_dict = {f'df{i}': d for i, (g, d) in enumerate(df.groupby('method'))}
print(df_dict.keys())
[out]:
dict_keys(['df0', 'df1', 'df2', 'df3', 'df4', 'df5', 'df6', 'df7', 'df8', 'df9'])
df_dict['df1].head(3)
要么 df_dict['Astrometry'].head(3)
- 这个组只有2个
method number orbital_period mass distance year
113 Astrometry 1 246.36 NaN 20.77 2013
537 Astrometry 1 1016.00 NaN 14.98 2010
df_dict['df2].head(3)
要么 df_dict['Eclipse Timing Variations'].head(3)
method number orbital_period mass distance year
32 Eclipse Timing Variations 1 10220.0 6.05 NaN 2009
37 Eclipse Timing Variations 2 5767.0 NaN 130.72 2008
38 Eclipse Timing Variations 2 3321.0 NaN 130.72 2008
df_dict['df3].head(3)
要么 df_dict['Imaging'].head(3)
method number orbital_period mass distance year
29 Imaging 1 NaN NaN 45.52 2005
30 Imaging 1 NaN NaN 165.00 2007
31 Imaging 1 NaN NaN 140.00 2004
或者
- 这是
DataFrames
使用熊猫创建单独的手动方法:布尔索引
- 这类似于接受的答案,但
.loc
不是必需的。
- 这是创建一对额外对象的可接受方法
DataFrames
。
- 的Python的方式来创建多个对象,是通过将它们放置在一个容器(例如
dict
,list
,generator
等等),如上所示。
df1 = df[df.method == 'Astrometry']
df2 = df[df.method == 'Eclipse Timing Variations']