簡體   English   中英

在同一df Python / Pandas中合並列

[英]Combining columns within the same df Python/Pandas

我是編程世界的新手,無法弄清楚如何連接pandas列。 我不想加入這些專欄,而是將它們彼此堆疊。

這是我到目前為止的代碼:

import pandas as pd
import numpy as np 

df = pd.read_excel("C:\\Users\\Kit Wesselhoeft\\Documents\\NEM\\Northend Manufacturing_deletecol.xlsx")

print(df)

df = pd.concat(['A','A'])

print(df)

圖片在這里

我想合並所有列,以使所有A彼此重疊,與B相同-E。

我怎樣才能做到這一點? 我想念什么嗎?

如果您確定列順序是一致的並且已平鋪[A,B,C,A,B,C ...],則可以通過重塑舊數據來創建新的DataFrame 否則, pd.wide_to_long存在更安全的替代方法,它使用實際的列名。

樣本數據

import numpy as np
import pandas as pd

np.random.seed(123)
df = pd.DataFrame(np.random.randint(1, 10, (3, 15)),
                  columns=list('BACDE')*3)
#   B  A  C  D  E  B  A  C  D  E  B  A  C  D  E
#0  3  3  7  2  4  7  2  1  2  1  1  4  5  1  1
#1  5  2  8  4  3  5  8  3  5  9  1  8  4  5  7
#2  2  6  7  3  2  9  4  6  1  3  7  3  5  5  7

重塑

cols = pd.unique(df.columns)  # Preserves Order
pd.DataFrame(df.values.reshape(-1, len(cols)), columns=cols)
#   B  A  C  D  E
#0  3  3  7  2  4
#1  7  2  1  2  1
#2  1  4  5  1  1
#3  5  2  8  4  3
#4  5  8  3  5  9
#5  1  8  4  5  7
#6  2  6  7  3  2
#7  9  4  6  1  3
#8  7  3  5  5  7

pd.wide_to_long

當列的排列順序不同時,或者列中的列多於其他列時,此選項很有用。 要求您通過添加_N來修改列名稱。

cols = pd.unique(df.columns)
s = pd.Series(df.columns).groupby(df.columns).cumcount()
df.columns = [f'{col}_{N}' for col,N in zip(df.columns, s)]

pd.wide_to_long(df.reset_index(), stubnames=cols, i='index', j='num', sep='_').reset_index(drop=True)
#   B  A  C  D  E
#0  3  3  7  2  4
#1  5  2  8  4  3
#2  2  6  7  3  2
#3  7  2  1  2  1
#4  5  8  3  5  9
#5  9  4  6  1  3
#6  1  4  5  1  1
#7  1  8  4  5  7
#8  7  3  5  5  7

您似乎在尋找“追加”:

import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randint(1,10, (3,2)),columns=list('AB'))
df2 = pd.DataFrame(np.random.randint(1,10, (3,2)),columns=list('AB'))
df3=df.append(df2)

In [2]: df3
Out[2]: 
   A  B
0  7  6
1  8  3
2  2  1
0  2  2
1  1  3
2  5  5

當您確切知道列的位置時,以下示例是相關的。 ALollz的代碼為基礎:

import numpy as np
import pandas as pd

np.random.seed(123)
df = pd.DataFrame(np.random.randint(1, 10, (3, 15)),
                  columns=list('BACDE')*3)
#   B  A  C  D  E  B  A  C  D  E  B  A  C  D  E
#0  3  3  7  2  4  7  2  1  2  1  1  4  5  1  1
#1  5  2  8  4  3  5  8  3  5  9  1  8  4  5  7
#2  2  6  7  3  2  9  4  6  1  3  7  3  5  5  7

# Using iloc

df1 = df.iloc[:, :5]

df2 = df.iloc[:,5:10]

df3 = df.iloc[:,10:]

df_final= pd.concat([df1,df2,df3]).reset_index(drop=True)

結果df_final

    B   A   C   D   E

0   3   3   7   2   4
1   5   2   8   4   3
2   2   6   7   3   2
3   7   2   1   2   1
4   5   8   3   5   9
5   9   4   6   1   3
6   1   4   5   1   1
7   1   8   4   5   7
8   7   3   5   5   7

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM