簡體   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