![](/img/trans.png)
[英]Python-Pandas: How to create a sort Dataframe through how many similar values in a column?
[英]Python-Pandas: How do I create a create columns from rows in a DataFrame without redundancy?
我加入了多個 DataFrame,現在我只有一個 DataFrame。 現在我想為沒有冗余的列創建相同的 ID 行。 說清楚:
我現在擁有的 DataFrame:
column1 column2 column3
row1 2 4 8
row2 1 18 7
row3 54 24 69
row3 54 24 10
row4 26 32 8
row4 26 28 8
你可以看到我有兩個 row3 和 row4 但它們在 column2 和 column3 中是不同的
這是我想得到的 DataFrame:
column1 column2 column3 row3_a row4_a
row1 2 4 8 NULL NUll
row2 1 18 7 NULL NULL
row3 54 24 69 10 NULL
row4 26 28 8 NULL 28
任何想法我應該如何解決這個問題?
這是一個奇怪的重塑,因為如果 column1 或 column2 中也有重復項,您將有歧義。 因此,擁有 MultiIndex 可能是一個很好的解決方案。
此解決方案使用melt
+ drop_duplicates
和pivot
的組合重塑
from string import ascii_lowercase
letters = dict(enumerate(ascii_lowercase, start=1))
# add a/b/c to duplicated rows
suffix = df.groupby(level=0).cumcount().map(letters)
idx2 = (df.index+suffix).fillna('')
df2 = (
df.assign(row=idx2)
.reset_index()
.melt(id_vars=['index', 'row'])
.drop_duplicates(['variable', 'value'])
.pivot(index='index', columns=['variable', 'row'], values='value')
.rename_axis(columns=(None, None), index=None) # cleanup index names
)
output:
column1 column2 column3
row4a row3a
row1 2.0 4.0 NaN 8.0 NaN
row2 1.0 18.0 NaN 7.0 NaN
row3 54.0 24.0 NaN 69.0 10.0
row4 26.0 32.0 28.0 NaN NaN
您可以根據需要展平多索引: df2.columns = df2.columns.map(''.join)
,如果您真的想要您的模棱兩可的名稱: df2.columns = df2.columns.map(max)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.