[英]Pandas fill column with row value
我有一個 dataframe,看起來像這樣。
key values
Interface InterfaceA
State Up
Line Status Up
ID 9000
Interface InterfaceB
State Down
Line Status Down
ID 9001
我想把它變成這樣
Interface State Line Status ID
InterfaceA Up Up 9000
InterfaceB Down Down 9001
我嘗試使用 loc 逐列插入,但是當它到達第二列時
ValueError:無法從重復軸重新索引
出現上述錯誤。
final_df['Interface'] = commands_df.loc[commands_df['key'].str.contains('Interface'), 'values']
final_df['State'] = commands_df.loc[commands_df['key'].str.contains('State'), 'values'] <-- Error starts here
ValueError: cannot reindex from a duplicate axis
df = df.assign(Interface=df[df['key'] == 'Interface']['values']).ffill()
print(df.pivot(index='Interface', columns='key', values='values').drop(columns='Interface'))
印刷:
key ID Line Status State
Interface
InterfaceA 9000 Up Up
InterfaceB 9001 Down Down
這是一個可能的解決方案-
import pandas as pd
df = pd.DataFrame(data=['InterfaceA', 'Up', 'Up', 9000, 'InterfaceB', 'Down', 'Down', 9001],
index=['Interface', 'State', 'Line Status', 'ID', 'Interface', 'State', 'Line Status', 'ID'])
df = df.T
print(df.groupby(df.columns.values, axis=1).agg(lambda x: x.values.tolist()).sum().apply(pd.Series).T)
ID Interface Line Status State
0 9000 InterfaceA Up Up
1 9001 InterfaceB Down Down
歸功於這個答案
帶有cumcount
和unstack
的簡單set_index
df_final = df.set_index([df.groupby('key').cumcount(),'key'])['values'].unstack()
Out[423]:
key ID Interface Line-Status State
0 9000 InterfaceA Up Up
1 9001 InterfaceB Down Down
另一種方法是使用pd.crosstab
df_final = pd.crosstab(df.groupby('key')['values'].cumcount(),
df['key'],
df['values'], aggfunc='first')
Out[424]:
key ID Interface Line-Status State
row_0
0 9000 InterfaceA Up Up
1 9001 InterfaceB Down Down
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.