通过迭代构造子数据帧



我有一个数据帧1000 X 10。

一列,有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]

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

您可以使用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))

最新更新