Как выбрать конкретные значения из кадров данных, хранящихся в словаре, соответствующих условию? - PullRequest
0 голосов
/ 28 января 2019

У меня есть несколько больших фреймов данных, каждый для идентификатора данных со столбцами, такими как «скорость», «ускорение», «время».Эти кадры данных хранятся в файле dict с соответствующим идентификатором в качестве ключа.Теперь мне нужно выбрать в качестве примера значение «скорость» в момент времени x для каждого идентификатора и добавить его в список.

С моим текущим кодом я уже могу управлять этим.Моя настоящая проблема заключается в том, что список значений - это либо список списков, содержащий каждое отдельное значение, либо список, содержащий не только значения, но и дополнительные данные, которые мне не нужны.

Пример данных:

    import pandas as pd
    df1 = pd.DataFrame({'Speed': [2.187180, 2.626560, 1.727620], 
                        'Speed Unit': ['um/s', 'um/s', 'um/s'],
                        'Acceleration': [0.00000, 4.08670, 6.42011],
                        'Acceleration Unit': ['um/s^2', 'um/s^2', 'um/s^2'], 
                        'Time': [1, 2, 3],
                        'TrackID': [1000000002, 1000000002, 1000000002]})

    bigDict = {ID1:df1,ID2:df2,...} 

Code1:

for ID in bigDict.keys():
    vlist.append(bigDict[ID].loc[bigDict[ID]['Time'] == 3, 'Speed'].tolist())

Это создает мой желаемый список значений, но каждое значение находится в самом списке.Если я не использую .tolist ()

Code2:

for ID in bigDict.keys():
    vlist.append(bigDict[ID].loc[bigDict[ID]['Time'] == 3, 'Speed'])

, я получаю уже упомянутый список, содержащий дополнительные данные

Код результатов 1:

[[1.7276200000000002], [2.47614], [8.48897], [10.7183], [14.4901],
[14.1587], [2.4992799999999997], [0.8659370000000001], [5.92513], 
[3.44153], [3.0253099999999997], [4.887919999999999], [8.53875], 
    ...]

Код результатов 2:

[365    1.72762
Name: Speed, dtype: float64, 367    2.47614
Name: Speed, dtype: float64, 368    8.48897
Name: Speed, dtype: float64, 371    10.7183
Name: Speed, dtype: float64, 369    14.4901
...]

1 Ответ

0 голосов
/ 28 января 2019

Это моя демонстрационная программа, надеюсь, она поможет.

import pandas as pd
df1=pd.DataFrame([[12,34,7],[13,45,9]],columns=["speed","acct","time"])
df2=pd.DataFrame([[17,44,3],[120,45,8]],columns=["speed","acct","time"])
df3=pd.DataFrame([[456,90,8],[13,45,3]],columns=["speed","acct","time"])

 #dictionary of dfs
d={123:df1,890:df2,567:df3}

#list 
l=[]

#use extend instead of append
 #append will add the series to list.
   #extends will break the series and add the values 
for i in d.keys():
    l.extend(d[i][d[i]["time"]==3]["speed"])

print(l)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...