Python与索引值连接

Python与索引值连接,python,pandas,dataframe,join,concat,Python,Pandas,Dataframe,Join,Concat,我想加入2个数据帧,例如: DataFrame1: A 1 B 2 C 3 D 4 数据框架2: A 1 A 3 B 4 B 3 B 7 C 4 D 6 D 8 结果应该如下所示: A 1 1 3 B 2 4 3 7 C 3 4 D 4 6 8 我尝试加入merge和concat,但没有任何效果。请您帮助我。一种方法是: df_out = pd.concat([df1,df2]) df_out.set_ind

我想加入2个数据帧,例如: DataFrame1:

A 1
B 2
C 3
D 4
数据框架2:

A 1
A 3
B 4
B 3
B 7
C 4
D 6
D 8
结果应该如下所示:

A 1 1    
    3    
B 2 4    
    3    
    7    
C 3 4
D 4 6    
    8

我尝试加入merge和concat,但没有任何效果。请您帮助我。

一种方法是:

df_out = pd.concat([df1,df2])

df_out.set_index([0,df_out.groupby([0]).cumcount()])[1].unstack()
输出:

     0    1    2    3
0                    
A  1.0  1.0  3.0  NaN
B  2.0  4.0  3.0  7.0
C  3.0  4.0  NaN  NaN
D  4.0  6.0  8.0  NaN
A  0    1
   1    1
   2    3
B  0    2
   1    4
   2    3
   3    7
C  0    3
   1    4
D  0    4
   1    6
   2    8
Name: 1, dtype: int64
    0  1
0   A  1
1      1
2      3
3   B  2
4      4
5      3
6      7
7   C  3
8      4
9   D  4
10     6
11     8
编辑更新以匹配预期输出: 输出:

     0    1    2    3
0                    
A  1.0  1.0  3.0  NaN
B  2.0  4.0  3.0  7.0
C  3.0  4.0  NaN  NaN
D  4.0  6.0  8.0  NaN
A  0    1
   1    1
   2    3
B  0    2
   1    4
   2    3
   3    7
C  0    3
   1    4
D  0    4
   1    6
   2    8
Name: 1, dtype: int64
    0  1
0   A  1
1      1
2      3
3   B  2
4      4
5      3
6      7
7   C  3
8      4
9   D  4
10     6
11     8
编辑更新多一点。。。 输出:

     0    1    2    3
0                    
A  1.0  1.0  3.0  NaN
B  2.0  4.0  3.0  7.0
C  3.0  4.0  NaN  NaN
D  4.0  6.0  8.0  NaN
A  0    1
   1    1
   2    3
B  0    2
   1    4
   2    3
   3    7
C  0    3
   1    4
D  0    4
   1    6
   2    8
Name: 1, dtype: int64
    0  1
0   A  1
1      1
2      3
3   B  2
4      4
5      3
6      7
7   C  3
8      4
9   D  4
10     6
11     8
你可以做:

import pandas as pd

data1 = [['A', 1],
         ['B', 2],
         ['C', 3],
         ['D', 4]]

data2 = [['A', 1],
         ['A', 3],
         ['B', 4],
         ['B', 3],
         ['B', 7],
         ['C', 4],
         ['D', 6],
         ['D', 8]]

df1 = pd.DataFrame(data=data1, columns=['c1', 'c2'])
df2 = pd.DataFrame(data=data2, columns=['c1', 'c2'])
result = pd.concat([df1, df2]).groupby('c1')['c2'].apply(list)

print(result)
输出

c1
A       [1, 1, 3]
B    [2, 4, 3, 7]
C          [3, 4]
D       [4, 6, 8]
Name: c2, dtype: object
0
A       [1, 1, 3]
B    [2, 4, 3, 7]
C          [3, 4]
D       [4, 6, 8]
Name: 1, dtype: object
或不带列:

df1 = pd.DataFrame(data=data1)
df2 = pd.DataFrame(data=data2)
result = pd.concat([df1, df2]).groupby(0)[1].apply(list)

print(result)
输出

c1
A       [1, 1, 3]
B    [2, 4, 3, 7]
C          [3, 4]
D       [4, 6, 8]
Name: c2, dtype: object
0
A       [1, 1, 3]
B    [2, 4, 3, 7]
C          [3, 4]
D       [4, 6, 8]
Name: 1, dtype: object

++对于nice代码,请您解释一下
apply(list)
在这里做了什么?将非常感谢您。@RavinderSingh.apply(list)将函数列表应用于groupby的组。@初学者您能更具体一点吗?@初学者2018是这样吗?最好编辑您的问题。在预期输出的每一行前面加四个空格。在pandas中,每一行必须有一个索引标签,因此0,1,2 01,2,3。。。我的输出中的etc行。Bosten真的非常感谢:D它现在与特征线一起工作。非常感谢你的代码