所以我有三个类似的数据集,由下面的行给出:
import pandas as pd
df1 = pd.DataFrame({'Name': ['Michael', 'Samantha', 'Jimmy'], 'Gender': ['M', 'F', 'M'], 'Mon': [0,1,2], 'Tue': [0,3,5], 'Wed': [0,5,3]})
df2 = pd.DataFrame({'Name': ['Michael', 'Samantha', 'Jimmy'], 'Gender': ['M', 'F', 'M'], 'Mon': [1,2,4], 'Tue': [2,3,5], 'Wed': [1,4,5]})
df3 = pd.DataFrame({'Name': ['Michael', 'Samantha', 'Jimmy'], 'Gender': ['M', 'F', 'M'], 'Mon': [5,4,0], 'Tue': [4,6,5], 'Wed': [1,7,6]})
每个数据帧分别显示如下:
>>> df1
Name Gender Mon Tue Wed
0 Michael M 0 0 0
1 Samantha F 1 3 5
2 Jimmy M 2 5 3
>>> df2
Name Gender Mon Tue Wed
0 Michael M 1 2 1
1 Samantha F 2 3 4
2 Jimmy M 4 5 5
>>> df3
df3
Name Gender Mon Tue Wed
0 Michael M 5 4 1
1 Samantha F 4 6 7
2 Jimmy M 0 5 6
有没有办法创建一个将数字组合成一个数据帧的结果数据帧?结果显示为:
Name Gender Mon Tue Wed
0 Michael M [0,1,5] [0,2,4] [0,1,1]
1 Samantha F [1,2,4] [3,3,6] [5,4,7]
2 Jimmy M [2,4,0] [5,5,5] [3,5,6]
必须保持数据的顺序。列表中的第一个项目不一定来自第一个数据集(df1
(,但我想始终知道第一个数据集中的数字落在哪里,这样我就可以从组合数据帧中提取特定的值。
让我们先进行concat
,然后进行groupby
df = pd.concat([df1,df2,df3]).set_index(['Name','Gender']).groupby(level=[0,1]).agg(list).reset_index()
Out[20]:
Name Gender Mon Tue Wed
0 Jimmy M [2, 4, 0] [5, 5, 5] [3, 5, 6]
1 Michael M [0, 1, 5] [0, 2, 4] [0, 1, 1]
2 Samantha F [1, 2, 4] [3, 3, 6] [5, 4, 7]