[英]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
結果使df1
和concat
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.