Pandas:如何自动创建循环,为不同的组创建多个列联表?

2024-10-05 15:20:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要创建列联表,但我只知道如何单独创建

我创建了一个数据帧(df),其中包含关于一个diseaseagedelta的信息(预测年龄和实际年龄之间的差异,其中“0”、“1”和“-1”是正常/过/欠年龄)

df = pd.DataFrame(np.array([[50,0,0],[42,1,1],[25,0,0], [25,1,1],[42,-1,0],[25,0,0]]),columns=['age', 'delta', 'disease'])

在此之后,我想与25岁的人一起创建df,为此我要:

df25 = df.loc[df['age'] == 25]

之后,我可以通过以下方式创建列联表:

pd.crosstab(index=df25['disease'], columns=df25['delta'])

现在表已经准备好了,但是我真正的df太大了,有很多独特的年龄。我试图创建循环,但没有成功。你能帮我把这个过程自动化吗?我需要适合每个年龄段的桌子


Tags: columns数据信息dataframedfagenp差异
3条回答

您可以通过^{}使用dict理解创建年龄组词典,如下所示:

age_dict = {k:v for k, v in df.groupby('age')}

然后,您可以通过以下方式访问各个年龄组(如25岁):

age_dict[25]

这将给出与df25 = df.loc[df['age'] == 25]相同的结果:

print(age_dict[25])

   age  delta  disease
2   25      0        0
3   25      1        1
5   25      0        0

您可以通过以下方式获得所有年龄组的列表:

age_dict_keys = [*age_dict.keys()]

结果:

print(age_dict_keys)

[25, 42, 50]

要打印所有年龄组的上下文表,您可以使用:

for key in age_dict_keys:
    print('==========================================')
    print('key=', key, '\ncrosstab:\n', pd.crosstab(index=age_dict[key]['disease'], columns=age_dict[key]['delta']))

输出:

==========================================
key= 25 
crosstab:
 delta    0  1
disease      
0        2  0
1        0  1
==========================================
key= 42 
crosstab:
 delta    -1   1
disease        
0         1   0
1         0   1
==========================================
key= 50 
crosstab:
 delta    0
disease   
0        1

unique_ages = df['age'].unique()

for age in unique_ages:
    df_temp = df.loc[df['age'] == age]
    # ... do something... save each df like so: df_temp.to_csv('table_for_age_'+ str(age) + '.csv')
    # ... or just work with temp_df inside the loop... 

所有列联表均为d

d=dict()
for age,values in df.groupby("age"):
    d.update({f"df{age}":pd.crosstab(index=values["disease"],columns=values["delta"])})

相关问题 更多 >