[英]Convert one row of a pandas dataframe into multiple rows
我想轉這個:
age id val
0 99 1 0.3
1 99 2 0.5
2 99 3 0.1
進入這個:
age id val
0 25 1 0.3
1 50 1 0.3
2 75 1 0.3
3 25 2 0.5
4 50 2 0.5
5 75 2 0.5
6 25 3 0.1
7 50 3 0.1
8 75 3 0.1
上下文:我的數據存儲了一個為所有年齡(年齡 = 99)編碼的值。 但是,我正在為其開發的應用程序需要為每個 id-age 對(id = 1,age = 25,50 和 75)明確規定的值。 對此有簡單的解決方案:遍歷 id 並附加一堆數據幀,但我正在尋找一些優雅的東西。 我想做一個多:一個從我的原始數據框合並到一個包含所有年齡的模板,但我仍然需要遍歷 id 來創建模板。
不知道,也許會有更優雅的方法,但是您可以執行諸如交叉聯接(或笛卡爾積 )的操作:
>>> df = pd.DataFrame({'age':[99,99,99],'id':[1,2,3],'val':[0.3,0.5,0.1]})
>>> df
age id val
0 99 1 0.3
1 99 2 0.5
2 99 3 0.1
>>> df2 = pd.DataFrame({'age':[99,99,99],'new_age':[25,50,75]})
>>> df2 = pd.merge(df, df2, on='age')
>>> del df2['age']
>>> df2 = df2.rename(columns={'new_age':'age'})
>>> df2
id val age
0 1 0.3 25
1 1 0.3 50
2 1 0.3 75
3 2 0.5 25
4 2 0.5 50
5 2 0.5 75
6 3 0.1 25
7 3 0.1 50
8 3 0.1 75
如果 Pandas >= 1.2 版本
import pandas as pd
pd.__version__
# '1.2.0'
left = pd.DataFrame({'col1': [1, 2], 'col2': [3, 4]})
right = pd.DataFrame({'col3': [5, 6]})
left.merge(right, how='cross')
col1 col2 col3
0 1 3 5
1 1 3 6
2 2 4 5
3 2 4 6
如果熊貓 < 1.2
df1.assign(key=1).merge(df2.assign(key=1), on="key").drop("key", axis=1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.