我希望使用值大于或等于1
的列来获取其他数据框填充。
df = pd.DataFrame({'A': '0 1 0 0 1 2'.split(),
'B': '0.1 0.2 0 0.5 0 0.1'.split(),'C':'0.1 0.2 0 0.5 0 0.1'.split()})
A B C
0 0 0.1 0.1
1 1 0.2 0.2
2 0 0 0
3 0 0.5 0.5
4 1 0 0
5 2 0.1 0.1
例如,我会这样得到df2
:
df2 = pd.DataFrame({'A': '0 1 0 0 1 2'.split()})
如果我尝试df2 = df2 [df2.values.astype(float)> = 1]我保留我的三列
答案 0 :(得分:3)
您可以使用ge
表示获取值greater
或equal
,然后按any
过滤至少一个True
和最后boolean indexing
按ix
的列:
print (df.astype(float).ge(1, axis=1))
A B C
0 False False False
1 True False False
2 False False False
3 False False False
4 True False False
5 True False False
print (df.astype(float).ge(1, axis=1).any())
A True
B False
C False
dtype: bool
#sample data are strings, so first cast to float
df2 = df.ix[:, df.astype(float).ge(1, axis=1).any()]
print (df2)
A
0 0
1 1
2 0
3 0
4 1
5 2
它也适用于:
df2 = df.ix[:, (df.astype(float) >= 1).any()]
print (df2)
A
0 0
1 1
2 0
3 0
4 1
5 2
答案 1 :(得分:2)
我创建了一个布尔掩码,其中列中的至少一些值是> = 1.然后我在数据和列上使用此掩码来生成新的数据帧。
我利用numpy进行掩饰。
# convert to floats and define mask
v = df.values.astype(float)
mask = (v >= 1).any(0)
# assign new dataframe with masked data and masked columns
# just incase there where multiple columns that satisfied.
df2 = pd.DataFrame(v.T[mask].T, columns=df.columns[mask])
df2
df 1000次
df = pd.concat([df.T for _ in range(1000)], ignore_index=True).T