繁体   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