2016-08-09 2 views
3

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

вот код:

import pandas as pd 

d = {'a':[1, 2, 3, 22, None], 
    'b':[4, None, 6, None, 33], 
    'c':[7, 8, None, None, None], 
    'd':[10, 110, 12, 250, 35], 
    'e':[None, None, None, 26, None], 
    'f':[16, None, 20, 39, 62], 
    'g':[19, 20, 21, None, None]} 

df = pd.DataFrame(d) 
print(df) 
print('\n') 

df2 = pd.DataFrame() 
df2 ['count'] = df.count() 
df2 = df2.sort_values(by='count', ascending = False) 
print(df2) 
print('\n') 

first_var = df2.index[0] 
print(first_var) 
print('\n') 

df3 = pd.DataFrame() 
df3 = df.copy() 

# this line gives the entire df, not d values under 100 
df3[df3[first_var] < 100] 

# this line crashes 
# df3[df.first_var < 100] 

print(df3) 

это выход:

a b c d e f g 
0 1 4 7 10 NaN 16 19 
1 2 NaN 8 110 NaN NaN 20 
2 3 6 NaN 12 NaN 20 21 
3 22 NaN NaN 250 26 39 NaN 
4 NaN 33 NaN 35 NaN 62 NaN 


count 
d  5 
a  4 
f  4 
b  3 
g  3 
c  2 
e  1 


d 


    a b c d e f g 
0 1 4 7 10 NaN 16 19 
1 2 NaN 8 110 NaN NaN 20 
2 3 6 NaN 12 NaN 20 21 
3 22 NaN NaN 250 26 39 NaN 
4 NaN 33 NaN 35 NaN 62 NaN 

********************** *******************

, что я действительно ищу этот выход:

a b c d e f g 
0 1 4 7 10 NaN 16 19 
2 3 6 NaN 12 NaN 20 21 
4 NaN 33 NaN 35 NaN 62 NaN 

любая помощь очень ценится. благодаря

ответ

1

Заменить весь свой код с этим:

df[df[df.count().argmax()] < 100] 

В основном:

d = {'a':[1, 2, 3, 22, None], 
    'b':[4, None, 6, None, 33], 
    'c':[7, 8, None, None, None], 
    'd':[10, 110, 12, 250, 35], 
    'e':[None, None, None, 26, None], 
    'f':[16, None, 20, 39, 62], 
    'g':[19, 20, 21, None, None]} 

df = pd.DataFrame(d) 

df[df[df.count().argmax()] < 100] 

Производит:

a b c d e f g 
0 1 4 7 10 NaN 16 19 
2 3 6 NaN 12 NaN 20 21 
4 NaN 33 NaN 35 NaN 62 NaN 

Что вокруг, как вы были!

3

Попробуйте это:

df[~(df > 100).any(axis=1)] 

    a  b c d e  f  g 
0 1.0 4.0 7.0 10 NaN 16.0 19.0 
2 3.0 6.0 NaN 12 NaN 20.0 21.0 
4 NaN 33.0 NaN 35 NaN 62.0 NaN 

"~" возвращает противоположное True/False условия.

Если ваши данные выглядели как это вместо:

d = {'a':[1, 2, 3, 22, 130], 
    'b':[4, None, 6, None, 33], 
    'c':[7, 8, None, None, None], 
    'd':[10, 110, 12, 250, 35], 
    'e':[None, None, None, 26, None], 
    'f':[16, None, 20, 12, 62], 
    'g':[19, 20, 21, None, None]} 

df = pd.DataFrame(d) 
df 

    a  b c d  e  f  g 
0 1 4.0 7.0 10 NaN 16.0 19.0 
1 2 NaN 8.0 110 NaN NaN 20.0 
2 3 6.0 NaN 12 NaN 20.0 21.0 
3 22 NaN NaN 250 26.0 12.0 NaN 
4 130 33.0 NaN 35 NaN 62.0 NaN 
    ^added this 

Use something like this: 

df[~(df["d"] > 100)] 

    a  b c d e  f  g 
0 1 4.0 7.0 10 NaN 16.0 19.0 
2 3 6.0 NaN 12 NaN 20.0 21.0 
4 130 33.0 NaN 35 NaN 62.0 NaN 
+0

но почему ??? Я не понимаю ... – Kartik

+1

Добавление информации, OP - новичок ... – Merlin

Смежные вопросы