簡體   English   中英

合並具有多個值的列 pandas dataframe

[英]Merge columns with more than one value in pandas dataframe

我使用 pandas 在 Python 中得到了這個 DataFrame:

第 1 列 第 2 欄 第 3 欄
你好 a,b,c 1,2,3
你好 b,c,a 4,5,6

第 3 列中的值屬於第 2 列中的類別。有沒有辦法將第 2 列和第 3 列組合起來,我得到這個 output?

第 1 列 一種 b c
你好 1個 2個 3個
你好 6個 4個 5個

任何建議都會非常有幫助! 謝謝!

您可以在exploding逗號后使用pd.crosstab

new_df = ( df.assign(t=df['Column 2'].str.split(','), a=df['Column 3'].str.split(',')).
                      explode(['t', 'a']) )

output = ( pd.crosstab(index=new_df['Column 1'], columns=new_df['t'], 
                     values=new_df['a'], aggfunc='sum').reset_index() ) 

Output:

t   Column 1    a   b   c
0   hello       1   2   3
1   hi          4   5   6
df.apply(lambda x: pd.Series(x['Column 3'].split(','), index=x['Column2'].split(',')), axis=1)    

output:

    a   b   c
0   1   2   3
1   4   5   6

結果使df1concat

df1 = df.apply(lambda x: pd.Series(x['Column 3'].split(','), index=x['Column2'].split(',')), axis=1)

pd.concat([df['Column 1'], df1], axis=1)

output:

    col1    a   b   c
0   hello   1   2   3
1   hi      4   5   6

效率方面,我會說在香草 python 中進行所有爭論並創建一個新的 dataframe:

from collections import defaultdict
outcome = defaultdict(list)
for column, row in zip(df['Column 2'], df['Column 3']):
    column = column.split(',')
    row = row.split(',')
    for first, last in zip(column, row):
        outcome[first].append(last)
pd.DataFrame(outcome).assign(Column = df['Column 1'])
   a  b  c Column
0  1  2  3  hello
1  6  4  5     hi

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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