在同一df Python / Pandas中合并列

时间:2018-12-12 21:13:00

标签: 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)

image here

我想合并所有列,以使所有A彼此重叠,与B相同-E。

我该怎么做?我想念什么吗?

3 个答案:

答案 0 :(得分:0)

如果您确定列顺序是一致的并且已平铺[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 来修改列名。

{{1}}

答案 1 :(得分:0)

您似乎在寻找“追加”:

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

答案 2 :(得分:0)

当您确切知道列的位置时,以下示例是相关的。以ALollz's代码为基础:

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