簡體   English   中英

Python-Pandas:如何在沒有冗余的情況下從 DataFrame 中的行創建創建列?

[英]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_duplicatespivot的組合重塑

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM