我已经搜索了几天而没有找到答案...我正在尝试根据有条件地测试的变量列名来减少数据帧的副本。
这是代码:
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
非常感谢任何帮助。感谢
答案 0 :(得分: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
&#34;〜&#34;返回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
答案 1 :(得分: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
你的方式真是太棒了!