我有一個這樣的 df:
| 父母 | 孩子 |
|---|---|
| 蘇茜 | 何塞 |
| 蘇茜 | 鮑勃 |
| 蘇茜 | 鮑勃 |
| 蘇茜 | 坦率 |
| 艾倫 | 鮑勃 |
| 艾倫 | 坦率 |
我希望它看起來像這樣:
| 家長 | child_jose | child_bob | child_frank |
|---|---|---|---|
| 蘇茜 | 1 | 2 | 1 |
| 艾倫 | 0 | 1 | 1 |
這只是計算父母擁有的每個孩子的數量,并為該孩子制作一列,其中包含每個父母擁有的孩子數量
我使用此代碼首先按父名分組:
''' by_parent = df.groupby(["ParentName", "ChildName"])['ChildName'].count().to_frame() '''
當我得到輸出時看起來是正確的,除了計數列被命名為“ChildName”。
所以在這段代碼之后它看起來像
| 父母名字 | 孩子姓名 | 孩子姓名 |
|---|---|---|
| 蘇茜 | 何塞 | 1 |
| 鮑勃 | 2 | |
| 坦率 | 1 | |
| 艾倫 | 鮑勃 | 1 |
| 坦率 | 1 | |
| 何塞 | 0 |
我在這里嘗試了一些類似的解決方案,但在直接獲取列名方面沒有運氣。使用 to_frame() 后看起來不錯,但是當我呼叫 df.columns 時,只顯示了“ChildName”。任何有關如何完成第一步的幫助,然后可能有助于擺脫 childName 列,這將是非常有幫助的。提前致謝,如果您需要更多說明,請發表評論。
uj5u.com熱心網友回復:
crosstab 在這里也很好,盡管它更像是一個方便的工具(根據資料集大小可能會很慢):
(pd.crosstab(df.parent, df.child)
.add_prefix('child_')
.reset_index()
.rename_axis(columns=None)
)
parent child_bob child_frank child_jose
0 Allen 1 1 0
1 Susie 2 1 1
uj5u.com熱心網友回復:
unstack在您之后使用groupby_count:
>>> df.groupby(["parent", "child"])['child'].count().unstack() \
.add_prefix('child_').rename_axis(index=None, columns=None) \
.fillna(0).astype(int)
child_bob child_frank child_jose
Allen 1 1 0
Susie 2 1 1
uj5u.com熱心網友回復:
好吧,只是為了展示另一種方法,因為很明顯這里還有其他更好的答案。
您可以按父項和子項對資料進行分組,然后可以迭代原始資料框并創建所需的列。使用get_group() count()方法,您可以獲得該特定組的計數。
grouped_data = df.groupby(['parent', 'child'])['child']
for _, row in df.iterrows():
df.loc[(df['parent'] == row.parent) & (df['child'] == row.child),
f'child_{row.child}'] = grouped_data.get_group((row.parent, row.child)).count()
此時,您的資料框如下所示:
| 父母 | 孩子 | child_jose | child_bob | child_frank | |
|---|---|---|---|---|---|
| 0 | 蘇茜 | 何塞 | 1.0 | NaN | NaN |
| 1 | 蘇茜 | 鮑勃 | NaN | 2.0 | NaN |
| 2 | 蘇茜 | 鮑勃 | NaN | 2.0 | NaN |
| 3 | 蘇茜 | 坦率 | NaN | NaN | 1.0 |
| 4 | 艾倫 | 鮑勃 | NaN | 1.0 | NaN |
| 5 | 艾倫 | 坦率 | NaN | NaN | 1.0 |
最后,我們洗掉child列,洗掉重復項,然后分組parent以得到sum()
df = df.drop_duplicates().drop(columns='child')
df = df.groupby(['parent']).sum().reset_index()
輸出:
| 父母 | child_jose | child_bob | child_frank | |
|---|---|---|---|---|
| 0 | 艾倫 | 0.0 | 1.0 | 1.0 |
| 1 | 蘇茜 | 1.0 | 2.0 | 1.0 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/355477.html
