[英]Splice and combine two columns to form a new data frame (Pandas)
我需要將我的pandas數據框轉換為一個奇怪的列表。 我有以下示例熊貓數據框:
輸入數據框:
mydf= pd.DataFrame.from_dict({'ARS':['xx2','xx3','xx1'], 'xyz':['yy1','xx2','xx3'], 'ppp':['xx3','yy2','xx2']}, orient='columns')
mydf= mydf.stack().reset_index()
mydf.columns= ['list1','list2','list3']
newdf= mydf[['list2','list3']]
newdf
list2 list3
0 ARS xx2
1 ppp xx3
2 xyz yy1
3 ARS xx3
4 ppp yy2
5 xyz xx2
6 ARS xx1
7 ppp xx2
8 xyz xx3
所需的數據框:
>ARS
xx2
xx3
xx1
>ppp
xx3
yy2
xx2
>xyz
yy1
xx2
xx3
有沒有人有簡單的熊貓方式來轉換它?
這是我的嘗試:
In [173]: v = np.concatenate(
...: pd.DataFrame(
...: newdf.groupby('list2')['list3'].apply(lambda x: [x.name] + x.values.tolist()))
...: .values
...: .reshape(-1,)
...: )
In [174]: pd.DataFrame({'col':v})
Out[174]:
col
0 ARS
1 xx2
2 xx3
3 xx1
4 ppp
5 xx3
6 yy2
7 xx2
8 xyz
9 yy1
10 xx2
11 xx3
附言:我敢肯定必須有更優雅的解決方案。
這是使用groupby
, pd.concat
和索引的Pandas方法:
(newdf.groupby('list2',as_index=False)
.apply(lambda x: pd.concat([pd.Series(x.iloc[0]['list2']),
pd.Series(x.loc[:,'list3'])]))
.reset_index(drop=True))
輸出:
0 ARS
1 xx2
2 xx3
3 xx1
4 ppp
5 xx3
6 yy2
7 xx2
8 xyz
9 yy1
10 xx2
11 xx3
dtype: object
如果您確實希望使用“>”符號,請使用以下命令:
(newdf.groupby('list2',as_index=False)
.apply(lambda x: pd.concat([pd.Series('>'+x.iloc[0]['list2']),
pd.Series(x.loc[:,'list3'])]))
.reset_index(drop=True))
輸出:
0 >ARS
1 xx2
2 xx3
3 xx1
4 >ppp
5 xx3
6 yy2
7 xx2
8 >xyz
9 yy1
10 xx2
11 xx3
dtype: object
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.