переберите список словаря и 1) сравните значение потока с элементом столбца потока 2) если оно совпадает, добавьте новый список с данными - PullRequest
0 голосов
/ 07 октября 2018

У меня есть фрейм данных

Sensor_Data_df={"Sensor" :[2306,2305,2304,2303,2302 ], "Time" :   [3.06,5.17,6.89,6.83,6.83], "Flow": [60,69,66,104,60]}  

Мне нужно пройтись по списку и сравнить значение потока с элементом столбца потока и, если он совпадает, добавить в новый список с данными датчика.Есть несколько тысяч строк данных, но только 127 потоков.Кажется, что вложенный цикл подходит, но я новичок в pandas и Python.

Цель состоит в том, чтобы создать новый список словарей следующим образом:

flows_df={"60":[2306,2302],"66":[2304],"69":[2305],"104":[2303]}

Мне нужно что-то вродеэто, но не удалось получить оператор if, поэтому я могу сравнить значение:

dfc = pd.DataFrame({'A':['aaa','bbb','ccc'],'B':[1,2,3]})
print(dfc)

numrows=len(dfc.loc[:,'A'])

print("The number of elements is " + str(numrows))

z_list=[]
ilist=[0,1,2]
i=0
for i in range(len(dfc['A'])):
#   if dfc[i,'A']==ilist.value()

z_list.append(dfc.loc[:,'B'])

print("____")
print(z_list)

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Если вы позволите df = pd.DataFrame(Sensor_Data_df), то вы можете сделать

df.groupby('Flow').Sensor.apply(list).to_dict()

. Для ваших примеров:

In [164]: df
Out[164]:
   Sensor  Time  Flow
0    2306  3.06    60
1    2305  5.17    69
2    2304  6.89    66
3    2303  6.83   104
4    2302  6.83    60

In [165]: df.groupby('Flow').Sensor.apply(list).to_dict()
Out[165]: {60: [2306, 2302], 66: [2304], 69: [2305], 104: [2303]}

Чистое решение Python, которое, вероятно, также будет соответствовать размеру вашегоданные (если не является частью узкого цикла) и сохранить вас зависимость от панд будет

from collections import defaultdict

sensors_by_flow = defaultdict(list)
for flow, sensor in zip(Sensor_Data_df['Flow'], Sensor_Data_df['Sensor']):
    sensors_by_flow[flow].append(sensor)
0 голосов
/ 07 октября 2018

Вместо циклического перебора DataFrame (который неэффективен и, как правило, его следует избегать при работе с пандами), вы можете проверить, какие потоки находятся в ilist, используя .isin () в вашем столбце потока.

В вашем примере соответствующие значения в столбце A можно извлечь следующим образом:

dfc.loc[dfc['B'].isin(ilist), 'A']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...