[英]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.