Python与索引值连接
我想加入2个数据帧,例如: DataFrame1: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
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它现在与特征线一起工作。非常感谢你的代码