我有两栏,我想做两件事。获取为1的行的ID也表示True,并获取目标列和教授为1的行的ID。
Ids prof goal
1 1 1
2 0 1
3 0 0
4 1 1
我想要这样的东西。 首先获取教授所在位置的所有ID。 第二项任务是获取prof和目标为1的id。
尝试:
df.groupby(['prof','goal']).size()
不确定如何通过此操作获取他们的ID。
答案 0 :(得分:2)
如果数据中只有1
和0
值,则创建布尔掩码转换为布尔值:
m1 = df['prof'].astype(bool)
m2 = df['goal'].astype(bool)
或通过1
进行比较:
m1 = df['prof'] == 1
m2 = df['goal'] == 1
m3 = df[['prof','goal']].all(axis=1)
如果Ids
是列,则用boolean indexing
用DataFrame.loc
进行过滤:
a = df.loc[m1, 'Ids']
b = df.loc[m1 & m2, 'Ids']
b = df.loc[m3, 'Ids']
如果Ids
是索引:
a = df.index[m1]
b = df.index[m1 & m2]
b = df.index[m3]
更慢的选择是在以下位置过滤器index
:
a = df[m1].index
b = df[m1 & m2].index
b = df[m3].index
答案 1 :(得分:0)
这给您想要的东西
import pandas as pd
df = pd.DataFrame({'Ids': list(range(1, 5)),
'prof': [1, 0, 0, 1],
'goal': [1, 1, 0, 1]})
df.set_index('Ids', drop=True, inplace=True)
df[df['prof'] == 1].index
df[(df['prof'] == 1) & (df['goal'] == 1)].index
答案 2 :(得分:0)
使用query
仅是现有答案的变体:
import pandas as pd
df = pd.read_clipboard()
df.set_index('Ids').query('prof == 1 and goal == 1').index
然后将返回
Int64Index([1, 4], dtype='int64', name='Ids')