[英]How to iterate over columns and connacenate two columns into one
我有一個 dataframe:
Border #1 [from] Border #1 [to] Border #2 [from] Border #2 [to]
index
0 BE BE_AL PL SK
1 BE BE_AL PL SK
我想將每兩列連接成一列(我還有更多列),期望的結果:
Border #1 Border #2
index
0 BE_BE_AL PL_SK
1 BE_BE_AL PL_SK
對於一列,我可以這樣做:
df['Border#1']=df['Border #1 [from]']+'_'+df['Border #1 [to]']
但我怎樣才能為多列做到這一點?
創建MutliIndex
通過[
用空格分割,所以可能 select 兩個級別都可以通過DataFrame.xs
和加入+
:
df.columns = df.columns.str.strip(']').str.split('\s+\[', expand=True)
print (df)
Border #1 Border #2
from to from to
0 BE BE_AL PL SK
1 BE BE_AL PL SK
print (df.columns)
MultiIndex([('Border #1', 'from'),
('Border #1', 'to'),
('Border #2', 'from'),
('Border #2', 'to')],
)
df = df.xs('from', axis=1, level=1) +'_'+ df.xs('to', axis=1, level=1)
print (df)
Border #1 Border #2
0 BE_BE_AL PL_SK
1 BE_BE_AL PL_SK
您可以對列進行分組並制作新的 dataframe
groups = df.columns.str.replace(' \[.+\]', '', regex=True)
df2 = pd.concat({g: d.apply('_'.join, axis=1)
for g,d in df.groupby(groups, axis=1)}, axis=1)
output:
Border #1 Border #2
index
0 BE_BE_AL PL_SK
1 BE_BE_AL PL_SK
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.