我的数据框为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]
但是它仅对第一个值起作用并停止。
答案 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))