通过从其他数据框中选择特定列来创建新数据框

时间:2021-02-20 17:46:13

标签: python pandas dataframe

这似乎是一个简单的问题,并且仍然可能是关于如何通过从其他数据框中选择特定列来创建新数据框的问题。 让我们通过三个虚拟数据帧 df1、df2、df3 来说明它,其中“位置”是所有数据帧中的公共列

df1 = pd.DataFrame({"Position": ["A", "B", "C"], "Team1": ["xyz", "xyy", "xxy"],"Team2": ["xxz", "yyx", "yxy"],"Team3": ["xzy", "zzy", "zxz"]})
df2 = pd.DataFrame({"Position": ["A", "B", "C"],"T1": ["1", "2", "4"],"T2": ["3", "5", "2"],"T3":["2","1","4"] }, index=[0, 1, 2], )
df3 = pd.DataFrame({"Position": ["A", "B", "C"],"T_1": ["IN", "IN", "OUT"],"T2": ["IN", "OUT", "OUT"],"T3":["OUT","IN","IN"] }, index=[0, 1, 2], )

我需要创建,在这种情况下,我在“位置”上合并 Team1、T1 和 T_1 的三个数据帧……现在问题是我不知道那里有多少支球队,df1、df2、df3 都会有相同数量的团队,但是团队数量可能会有所不同(在这种情况下我做了三个,但在实际场景中它可以是可变的,比如 N),我想知道是否可以执行一些迭代来根据数量创建数据帧团队?

这是查看输入的图形方式(为此示例定义了团队,但实际上它是可变的)和预期输出

enter image description here

1 个答案:

答案 0 :(得分:2)

您可以水平连接相关列:

new_dfs = [pd.concat((df.set_index('Position').iloc[:,i] for df in (
    df1, df2, df3)), axis=1).reset_index() for i in range(3)]

它给出:

for i in new_dfs:
    print(i)

    
  Position Team1 T1  T_1
0        A   xyz  1   IN
1        B   xyy  2   IN
2        C   xxy  4  OUT
  Position Team2 T2   T2
0        A   xxz  3   IN
1        B   yyx  5  OUT
2        C   yxy  2  OUT
  Position Team3 T3   T3
0        A   xzy  2  OUT
1        B   zzy  1   IN
2        C   zxz  4   IN