Отредактируйте данные в фильтре Python Pandas и примените их к исходному фрейму данных - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь выяснить, как фильтровать данные в пандах, а затем назначить значение всем строкам столбца для элементов, которые соответствуют критериям фильтра и влияют ли они на исходный фрейм данных.Вот самая близкая попытка, которая у меня есть, но она выдает много информационных предупреждений:

    import pandas as pd
    df = pd.read_csv('http://www.sharecsv.com/dl/9096d32f98aa0ac671a1cca16fa43be8/SalesJan2009.csv')
    df['Zone'] = ''
    zone1 = df[(df['Latitude'] > 0) & (df['Latitude'] > 0)]
    zone2 = df[(df['Latitude'] < 0) & (df['Latitude'] > 0)]
    zone3 = df[(df['Latitude'] > 0) & (df['Latitude'] < 0)]
    zone4 = df[(df['Latitude'] < 0) & (df['Latitude'] < 0)]
    zone1[['Zone']] = zone1[['Zone']] = 1
    zone2[['Zone']] = zone1[['Zone']] = 2
    zone3[['Zone']] = zone1[['Zone']] = 3
    zone4[['Zone']] = zone1[['Zone']] = 4
    df

Это никак не влияет на исходный фрейм данных, но устанавливает значения в отфильтрованных подмножествах.

Я предполагаю, что мне может понадобиться отфильтровать все, что соответствует каждому из моих фильтров, удалить его из оригинала и затем объединить изменения обратно в исходный ??

Это случайный набор данныхчтобы проиллюстрировать, что я собираюсь сделать, но в моем фактическом наборе данных есть данные, которые не соответствуют никаким критериям фильтрации, и мне нужно поддерживать их как неизвестные, так как я не использую все строки, как в этом примере.

Я стараюсь избегать циклического повторения каждой строки и проверки критериев по каждой строке, поэтому, если кто-нибудь знает, как я могу это сделать, я буду очень благодарен!

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

IIUC, вы пытаетесь сделать что-то вроде этого:

zone1 = (df['Latitude'] > 0) & (df['Longitude'] > 0)
zone2 = (df['Latitude'] < 0) & (df['Longitude'] > 0)
zone3 = (df['Latitude'] > 0) & (df['Longitude'] < 0)
zone4 = (df['Latitude'] < 0) & (df['Longitude'] < 0)

df['Zone'] = np.select([zone1,zone2,zone3,zone3],['Zone 1','Zone 2', 'Zone 3','Zone 4'])

Вывод:

  Transaction_date   Product Price Payment_Type               Name  \
0      1/2/09 6:17  Product1  1200   Mastercard           carolina   
1      1/2/09 4:53  Product1  1200         Visa             Betina   
2     1/2/09 13:08  Product1  1200   Mastercard  Federica e Andrea   
3     1/3/09 14:44  Product1  1200         Visa              Gouya   
4     1/4/09 12:56  Product2  3600         Visa            Gerd W    

                           City     State         Country Account_Created  \
0                      Basildon   England  United Kingdom     1/2/09 6:00   
1  Parkville                           MO   United States     1/2/09 4:42   
2  Astoria                             OR   United States    1/1/09 16:21   
3                        Echuca  Victoria       Australia   9/25/05 21:13   
4  Cahaba Heights                      AL   United States  11/15/08 15:47   

     Last_Login   Latitude   Longitude    Zone  
0   1/2/09 6:08  51.500000   -1.116667  Zone 3  
1   1/2/09 7:49  39.195000  -94.681940  Zone 3  
2  1/3/09 12:32  46.188060 -123.830000  Zone 3  
3  1/3/09 14:22 -36.133333  144.750000  Zone 2  
4  1/4/09 12:45  33.520560  -86.802500  Zone 3  
0 голосов
/ 26 февраля 2019

Вы пропустили, что оба условия проверяют Широта , и вам следует проверить .loc, чтобы вы научились правильно изменять значения в частях кадра данных.

import pandas as pd
df = pd.read_csv('http://www.sharecsv.com/dl/9096d32f98aa0ac671a1cca16fa43be8/SalesJan2009.csv')
df['Zone'] = ''
zone1 = (df['Latitude'] > 0) & (df['Longitude'] > 0)
zone2 = (df['Latitude'] < 0) & (df['Longitude'] > 0)
zone3 = (df['Latitude'] > 0) & (df['Longitude'] < 0)
zone4 = (df['Latitude'] < 0) & (df['Longitude'] < 0)
df.loc[zone1, 'Zone'] = 1
df.loc[zone2, 'Zone'] = 2
df.loc[zone3, 'Zone'] = 3
df.loc[zone4, 'Zone'] = 4
df
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...