【发布时间】:2017-12-04 02:52:54
【问题描述】:
如何获取 Pandas DataFrame,根据条件对其进行拆分,并将生成的 DataFrames 保存为具有预先指定键的 dict 对象中的值?
我有一个 Pandas 数据框(来自 R's networkDynamicData 包的 hospital.dat_ 数据)。我将其读入并将其作为 Pandas DataFrame 处理,如下所示:
with open('hospital.dat_', 'r') as f:
data = f.readlines()
#Convert to a pandas dataframe for easier manipulation
split_data = []
for line in data:
split_line = line.split('\t')
split_data.append(split_line)
df = pd.DataFrame(split_data)
df.columns=['Time', 'ID1', 'ID2', 'Att1', 'Att2'] #assign column names
DataFrame df 如下所示:
print df.head()
Time ID1 ID2 Att1 Att2
0 140 1157 1232 MED ADM\n
1 160 1157 1191 MED MED\n
2 500 1157 1159 MED MED\n
3 520 1157 1159 MED MED\n
4 560 1159 1191 MED MED\n
我想根据Time 将DataFrame 拆分为多个部分。作为 MWE,假设我想要一个具有三个 DataFrame 值的 dict 对象:
- 一个包含
Time小于200的条目的所有行; - 包含大于 200 但小于 550 的
Time条目的所有行; - 包含大于 550 但小于 600 的
Time条目的所有行(仅剩) - 开始的时间索引是关键。
也就是说,我想要:
0:
Time ID1 ID2 Att1 Att2
0 140 1157 1232 MED ADM\n
1 160 1157 1191 MED MED\n
200:
Time ID1 ID2 Att1 Att2
0 500 1157 1159 MED MED\n
1 520 1157 1159 MED MED\n
550:
Time ID1 ID2 Att1 Att2
0 560 1159 1191 MED MED\n
我有一个列表,其中包含拆分值,末尾为 0,最大值为:
my_list = [0, 200, 550, 600]
作为开始,我已经尝试过:
sorted_df = {i : [df.loc[(df['Time'] > i) & (df['Time'] <= j)] for i, j in enumerate(my_list)]}
但这只给了我一个键,因为我一直在覆盖,而且值是空列表。
问题:如何获取 Pandas DataFrame,根据条件对其进行拆分,并将生成的 DataFrames 保存为具有预先指定键的 dict 对象中的值?
【问题讨论】: