繁体   English   中英

选定列的唯一值转换为 dataframe 列

[英]Selected columns unique values convert to dataframe columns

我有一个main_df dataframe 如下。

   user_id  main_code   sub_1   sub_2
0   03920   AA  YA  ZA
1   34233   BB  YB  ZA
2   02342   AA  YD  ZB
3   32324   CC  YA  ZA
4   52323   AA  YA  ZD
5   20932   DD  YD  ZD
6   02034   BB  YA  ZA

我正在尝试实现低于 output dataframe。 main_df dataframe 唯一值的选定列(sub_1 和 sub_2)计数并转换为 dataframe 列。

  main_code YA  YB  YD  ZA  ZB  ZD
0   AA  2.0 NaN 1.0 1.0 1.0 1.0
1   BB  1.0 1.0 NaN 2.0 NaN NaN
2   CC  1.0 NaN NaN 1.0 NaN NaN
3   DD  NaN NaN 1.0 NaN NaN 1.0

到目前为止,我尝试如下。 我得到一个不同的 output。

result_df = pd.DataFrame()
for col in ['sub_1','sub_2']:
    result_df = pd.concat([result_df, pd.DataFrame(main_df[pd.notnull(main_df[col])]['main_code'].value_counts())], axis=1)
result_df.columns = ['sub_1','sub_2']

有人可以指导我会很有帮助。 谢谢你。

.melt.pivot_table一起使用

df = df.melt(id_vars='main_code', value_vars=['sub_1', 'sub_2']).pivot_table(index='main_code', columns='value', aggfunc='count').reset_index()

这里是 go:

pd.merge(
    df.pivot_table(index="main_code", columns="sub_1", aggfunc="count")["sub_2"],
    df.pivot_table(index="main_code", columns="sub_2", aggfunc="count")["sub_1"],
    left_index=True,
    right_index=True
)

虽然已经给出了正确的答案。 如果您想遵循定制的方法,您可以使用它。

a = (pd.pivot_table(df, index='main_code',columns= 
     ['sub_1'],aggfunc=np.count_nonzero).reset_index())

cols = a.columns.droplevel(0).to_list()

cols[0]='main_code'

a.columns=cols

print(a)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM