[英]Selected columns unique values convert to dataframe columns
I have a main_df
dataframe as below.我有一个
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
I am trying to achieve below output dataframe.我正在尝试实现低于 output dataframe。 Selected columns(sub_1 & sub_2) of main_df dataframe unique values count and covert to dataframe columns.
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
So far I tried as below.到目前为止,我尝试如下。 I get a different output.
我得到一个不同的 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']
It would be helpful someone can guide me.有人可以指导我会很有帮助。 Thank you.
谢谢你。
Use .melt
with .pivot_table
将
.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()
Here you go:这里是 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
)
Although right answer is already given.虽然已经给出了正确的答案。 You can use this if you want to follow a customized approach.
如果您想遵循定制的方法,您可以使用它。
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.