gpt4 book ai didi

python - 如何在Python中使用pandas将多个数据集的数据组织到同一个数据框中?

转载 作者:太空宇宙 更新时间:2023-11-03 16:11:38 25 4
gpt4 key购买 nike

我在使用 Python 中的 pandas 来按照我想要的方式在数据框中组织一些数据时遇到了麻烦。

我想要一个数据框,其中数据将组织为三列(例如 TimeVI) .

但是,我希望将不同样本的数据放在同一个数据框中,以便我可以轻松地从 Sample#1Sample#2 中选择数据.

我想到的是这样的:

df1 = pd.DataFrame({'Time': np.arange(0,10,0.5), 'V': np.random.rand(20), 'I': np.random.rand(20)})
df1['Sample']= 'sample_1'

df2 = pd.DataFrame({'Time': np.arange(0,10,0.5), 'V': np.random.rand(20), 'I': np.random.rand(20)})
df2['Sample']= 'sample_2'

df = df1.append(df2)

请注意,我添加了另一个名为 Sample 的列来跟踪哪些数据对应于哪个样本。

但是我不知道如何从 df 调用 sample_1sample_2 中的数据

我该如何做到这一点?这是组织数据的正确方法吗?我应该使用 MultiIndex 吗?

最佳答案

是的,MultiIndex 是一种可能的解决方案:

np.random.seed(1)
df1 = pd.DataFrame({'Time': np.arange(0,10,0.5),
'V': np.random.rand(20),
'I': np.random.rand(20)})

np.random.seed(2)
df2 = pd.DataFrame({'Time': np.arange(0,10,0.5),
'V': np.random.rand(20),
'I': np.random.rand(20)})

#print (df1)
#print (df2)

您可以concat所有 DataFrame 为一,并在参数 keys 中指定每个源 DataFrame:

print (pd.concat([df1, df2], keys=('sample_1','sample_2')))
I Time V
sample_1 0 0.800745 0.0 0.417022
1 0.968262 0.5 0.720324
2 0.313424 1.0 0.000114
3 0.692323 1.5 0.302333
4 0.876389 2.0 0.146756
5 0.894607 2.5 0.092339
6 0.085044 3.0 0.186260
7 0.039055 3.5 0.345561
8 0.169830 4.0 0.396767
9 0.878143 4.5 0.538817
10 0.098347 5.0 0.419195
11 0.421108 5.5 0.685220
12 0.957890 6.0 0.204452
13 0.533165 6.5 0.878117
14 0.691877 7.0 0.027388
15 0.315516 7.5 0.670468
16 0.686501 8.0 0.417305
17 0.834626 8.5 0.558690
18 0.018288 9.0 0.140387
19 0.750144 9.5 0.198101
sample_2 0 0.505246 0.0 0.435995
1 0.065287 0.5 0.025926
2 0.428122 1.0 0.549662
3 0.096531 1.5 0.435322
4 0.127160 2.0 0.420368
5 0.596745 2.5 0.330335
6 0.226012 3.0 0.204649
7 0.106946 3.5 0.619271
8 0.220306 4.0 0.299655
9 0.349826 4.5 0.266827
10 0.467787 5.0 0.621134
11 0.201743 5.5 0.529142
12 0.640407 6.0 0.134580
13 0.483070 6.5 0.513578
14 0.505237 7.0 0.184440
15 0.386893 7.5 0.785335
16 0.793637 8.0 0.853975
17 0.580004 8.5 0.494237
18 0.162299 9.0 0.846561
19 0.700752 9.5 0.079645

可以通过 xs 选择数据- 参见cross section :

print (df.xs('sample_1', level=0))
I Time V
0 0.800745 0.0 0.417022
1 0.968262 0.5 0.720324
2 0.313424 1.0 0.000114
3 0.692323 1.5 0.302333
4 0.876389 2.0 0.146756
5 0.894607 2.5 0.092339
6 0.085044 3.0 0.186260
7 0.039055 3.5 0.345561
8 0.169830 4.0 0.396767
9 0.878143 4.5 0.538817
10 0.098347 5.0 0.419195
11 0.421108 5.5 0.685220
12 0.957890 6.0 0.204452
13 0.533165 6.5 0.878117
14 0.691877 7.0 0.027388
15 0.315516 7.5 0.670468
16 0.686501 8.0 0.417305
17 0.834626 8.5 0.558690
18 0.018288 9.0 0.140387
19 0.750144 9.5 0.198101

如果需要,仅选择某些列:

print (df.xs('sample_1', level=0)[['Time','I']])
Time I
0 0.0 0.800745
1 0.5 0.968262
2 1.0 0.313424
3 1.5 0.692323
4 2.0 0.876389
5 2.5 0.894607
6 3.0 0.085044
7 3.5 0.039055
8 4.0 0.169830
9 4.5 0.878143
10 5.0 0.098347
11 5.5 0.421108
12 6.0 0.957890
13 6.5 0.533165
14 7.0 0.691877
15 7.5 0.315516
16 8.0 0.686501
17 8.5 0.834626
18 9.0 0.018288
19 9.5 0.750144
<小时/>

另一个解决方案是使用 IndexSlice - 请参阅 using slicers

idx = pd.IndexSlice
print (df.loc[idx['sample_1',:], ['Time','I']])
Time I
sample_1 0 0.0 0.800745
1 0.5 0.968262
2 1.0 0.313424
3 1.5 0.692323
4 2.0 0.876389
5 2.5 0.894607
6 3.0 0.085044
7 3.5 0.039055
8 4.0 0.169830
9 4.5 0.878143
10 5.0 0.098347
11 5.5 0.421108
12 6.0 0.957890
13 6.5 0.533165
14 7.0 0.691877
15 7.5 0.315516
16 8.0 0.686501
17 8.5 0.834626
18 9.0 0.018288
19 9.5 0.750144

如果需要删除第一级Multiindex:

idx = pd.IndexSlice
print (df.loc[idx['sample_1',:], ['Time','I']].reset_index(level=0, drop=True))
Time I
0 0.0 0.800745
1 0.5 0.968262
2 1.0 0.313424
3 1.5 0.692323
4 2.0 0.876389
5 2.5 0.894607
6 3.0 0.085044
7 3.5 0.039055
8 4.0 0.169830
9 4.5 0.878143
10 5.0 0.098347
11 5.5 0.421108
12 6.0 0.957890
13 6.5 0.533165
14 7.0 0.691877
15 7.5 0.315516
16 8.0 0.686501
17 8.5 0.834626
18 9.0 0.018288
19 9.5 0.750144

关于python - 如何在Python中使用pandas将多个数据集的数据组织到同一个数据框中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39247527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com