我想选择一些具有多个条件的行。我想即使其中一个条件为真,也选择了该行。
<FlatList data={this.state.data} keyExtractor={item => item.id}
numColumns={columns}
renderItem={({ item }) => {
if (item.empty) {
return <View style={[Cards.item, Cards.itemEmpty]} />;
}
return (<View style={[{ flex: 1 }]}>
<TouchableOpacity onPress={() => this.onPressChangeColor(item.id)}
style={[Cards.item, {
backgroundColor: "grey",
borderColor: "grey",
borderWidth: 2
}]}>
<Text style={[{ color: "white", textAlign: 'center', alignSelf: 'center' }]}>{item.name}</Text>
</TouchableOpacity>
</View>);
}
}
/>
我希望输出行具有至少一个条件,但在输出中,我具有没有任何这些条件的行。
我已经申请了:
def obtain(x):
mask = (x['EucDistPoint'] >= x['EucDistPoint'].mean()) | (x['CRS'] >=
x['CRS'].mean()) | (x['CRC'] >= x['CRC'].mean())
selected = x.loc[mask]
return selected
selected = data.groupby('MMSI').apply(obtain)
但是当我想检查输出时,我使用了:
def obtain(x):
mask = (x.EucDistPoint >= x.EucDistPoint.mean()) |\
(x.CRS >= x.CRS.mean()) | (x.CRC >= x.CRC.mean())
return x[mask]
selected = data.groupby('MMSI').apply(obtain)
但是输出是这样的:
selected[selected['MMSI']==210161000].min()
这是错误的,因为CRS和CRC与EucDistPoint的最小值分别为0.0022、0.0446和551.887
答案 0 :(得分:1)
您的代码按“原样”运行。您也可以将其写得短一些:
def obtain(x):
mask = (x.EucDistPoint >= x.EucDistPoint.mean()) |\
(x.CRS >= x.CRS.mean()) | (x.CRC >= x.CRC.mean())
return x[mask]
data.groupby('MMSI').apply(obtain)
示例
我的源DataFrame:
MMSI CRS CRC EucDistPoint
0 210161100 1.0 1.0000 0.0
1 210161100 0.0 0.0281 200.0
2 210161100 0.0 0.0530 589.1
3 210161200 1.0 1.0000 0.0
4 210161200 0.0 0.0281 500.0
5 210161200 0.0 0.0530 200.1
均值(data.groupby('MMSI').mean()
):
CRS CRC EucDistPoint
MMSI
210161100 0.333333 0.360367 263.033333
210161200 0.333333 0.360367 233.366667
特定列(df.groupby('MMSI').transform(lambda x: x >= x.mean())
)的条件:
CRS CRC EucDistPoint
MMSI
210161100 True True False
210161100 False False False
210161100 False False True
210161200 True True False
210161200 False False True
210161200 False False False
如您所见,第1行和第5行的所有3列(行)均为 False 数字从0开始),因此它们不应出现在输出中。
以及您或我的函数的结果:
MMSI CRS CRC EucDistPoint
MMSI
210161100 0 210161100 1.0 1.0000 0.0
2 210161100 0.0 0.0530 589.1
210161200 3 210161200 1.0 1.0000 0.0
4 210161200 0.0 0.0281 500.0
应有尽有。