我在某些列中有具有多值的資料框
df = pd.DataFrame({'id': ['1','2','3',],
'fruits': ['apple, Apple','Orange, grapefruit','Melon'],
'count': [2,2,1]})
我想分隔水果列中的值,所以我的資料框變成這樣
id fruits
1 apple
1 Apple
2 Orange
2 grapefruit
3 Melon
uj5u.com熱心網友回復:
您必須通過拆分逗號分隔的字串和分解結果來重新分配列值。
df = df.assign(fruits=df['fruits'].str.split(',')).explode('fruits')
輸出將是:
id fruits count
0 1 apple 2
0 1 Apple 2
1 2 Orange 2
1 2 grapefruit 2
2 3 Melon 1
如果你愿意,你可以重新排序索引,沒有重復,只需做一個reset:
df = df.reset_index(drop=True)
輸出將是:
id fruits count
0 1 apple 2
1 1 Apple 2
2 2 Orange 2
3 2 grapefruit 2
4 3 Melon 1
uj5u.com熱心網友回復:
您可以在相關列上使用str方法:explode
ser = df.fruits.str.split(",\s").explode()
輸出:
0 apple
0 Apple
1 Orange
1 grapefruit
2 Melon
Name: fruits, dtype: object
如果您希望保留id:
df2 = pd.DataFrame(ser)
df2['id'] = df['id']
這使用 df, df2 的索引來插入 的值id:
fruits id
0 apple 1
0 Apple 1
1 Orange 2
1 grapefruit 2
2 Melon 3
uj5u.com熱心網友回復:
df2 = pd.DataFrame(columns=['id','fruits'])
for i, row in df.iterrows():
temp = pd.DataFrame([[row['id'],fruit.replace(" ", "")] for fruit in row['fruits'].split(',')], columns=['id','fruits'], index = [i for _ in row['fruits'].split(',')])
df2 = df2.append(temp)
這個答案比以前的答案慢,因為它不使用 Pandas 內置函式(分配或分解),但在演算法上更容易理解。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/525430.html
標籤:Python熊猫数据框
上一篇:左連接表而不復制右表行值
