我已经找到了解决问题的方法,但我正在寻求更快的方法。
有一个只有两列的DataFrame。
export default class App extends Component {
render() {
return (
<View style={styles.view}>
<FlatList
data={['1', '2', '3', '4', '5', '6', '7', '8']}
numColumns={4}
renderItem={({ item }) => (
<View style={styles.separator}>
<Text style={styles.text}>{item}</Text>
</View>
)}
/>
</View>
);
}
}
const styles = StyleSheet.create({
view: {
paddingTop: 30,
},
text: {
flex: 1,
fontSize: 40,
textAlign: 'center'
},
separator: {
flex: 1,
borderWidth: 1,
borderColor: 'red'
},
});
现在,这是我的问题。我想获得具有两列最常见值的id。我目前的解决方案就在下面:
In[1]: import pandas as pd
In[2]: temp = pd.DataFrame({'id':['a','a','a','b','b','b'],'col1':[1,2,3,1,2,5],'col2':[1,2,4,1,3,4]}).set_index('id')
In[3]: temp
Out[3]:
col1 col2
id
a 1 1
a 2 2
a 3 4
b 1 1
b 2 3
b 5 4
我的小例子的答案是&#39; a&#39;
In[4]: def count_num(table_name): return (sum(table_name.col1==table_name.col2))
In[5]: best_value, best_ans = [0], [0]
In[6]: for m in np.unique(temp.index):
...: temp_ans = count_num(temp.loc[m])
...: if temp_ans > best_value[0]:
...: best_value.append(temp_ans)
...: best_ans.append(m)
...: best_value = best_value[1:]
...: best_ans = best_ans[1:]
正如你所知,我使用for循环一次运行一个索引的函数,如果有很多不同的索引,那将是浪费时间。
我希望不使用for循环就可以做同样的事情。
谢谢你的帮助!!!
答案 0 :(得分:0)
使用groupby
In [1310]: temp.eq(temp.col1, axis='index').all(axis=1).groupby('id').sum().idxmax()
Out[1310]: 'a'
可替换地,
In [1313]: temp.apply(pd.Series.nunique, axis=1).eq(1).groupby('id').sum().idxmax()
Out[1313]: 'a'
如果您只有两列可以
,则上述两种解决方案适用于多列In [1329]: temp.col1.eq(temp.col2).groupby('id').sum().idxmax()
Out[1329]: 'a'
详细说明:
In [1315]: temp.eq(temp.col1, axis='index')
Out[1315]:
col1 col2
id
a True True
a True True
a True False
b True True
b True False
b True False
In [1316]: temp.apply(pd.Series.nunique, axis=1)
Out[1316]:
id
a 1
a 1
a 2
b 1
b 2
b 2
dtype: int64
答案 1 :(得分:0)
您可以先比较列,然后将<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
$('button').click(function() {
console.log('work');
});
});
</script>
<button>click</button>
值与groupby
和sum
相加,然后按idxmax
得到最大值索引:
True
与...相同:
print ((temp.col1==temp.col2))
id
a True
a True
a False
b True
b False
b False
dtype: bool
print ((temp.col1==temp.col2).groupby(level='id').sum())
id
a 2.0
b 1.0
dtype: float64
print ((temp.col1==temp.col2).groupby(level='id').sum().idxmax())
a