通过迭代构造子数据帧

时间:2018-11-07 10:23:35

标签: python-3.x pandas dataframe

我的数据框为1000 X10。

一列,具有6个唯一的数值

df['column'].value_counts() = [ 0,2,5,8,9,10]

我想自动化一个过程,可能是一个迭代,该过程将执行以下操作:

对于列中的每个唯一值,创建一个较小的数据集,其中包含该列中具有该唯一值的所有行。对于我来说,每个唯一值中的6个较小的数据集

我知道如何进行而无需迭代。例如

df_0 = df[df['column'] == 0]

df_1 = df[df['column'] == 1]

但是我该如何自动化呢?

我想过……

for value in df['column'].value_counts():
    df_value = df[df['column'] == value]

但是它仅对第一个值起作用并停止。

1 个答案:

答案 0 :(得分:0)

您可以使用python和pandas轻松地完成所需的操作:

import pandas as pd

data = {1: [1, 2, 3, 1, 2, 3, 4, 5, 6, 1]}
data.update({val: range(10) for val in range(2, 101)})
df = pd.DataFrame(data)

print('df_shape =', df.shape)

for value in sorted(df[1].unique()):
    sub_df = df[df[1] == value]
    print(
        'value = {}, sub_df_shape = {}'
        .format(value, sub_df.shape))

输出:

df_shape = (10, 100)
value = 1, sub_df_shape = (3, 100)
value = 2, sub_df_shape = (2, 100)
value = 3, sub_df_shape = (2, 100)
value = 4, sub_df_shape = (1, 100)
value = 5, sub_df_shape = (1, 100)
value = 6, sub_df_shape = (1, 100)

编辑

您可以随时访问子数据框。如果您仍然想将子数据帧存储在一些单独的变量中,则可以使用字典:

ans = dict()
for value in sorted(df[1].unique()):
    ans[value] = df[df[1] == value]

您甚至可以为每个子数据帧创建单独的变量(尽管这很麻烦,在任何情况下我都避免这样做):

for value in sorted(df[1].unique()):
    sub_df = df[df[1] == value]
    exec('df_{} = sub_df'.format(value))