我在DataFrame中有一列,其中包含类别列表。例如:
import React, { Component } from "react";
import { animated, config, Transition } from "react-spring";
import ReactDOM from "react-dom";
import "./styles.css";
class App extends Component {
constructor(props) {
super(props);
this.state = {
items: [
{
id: 1,
text: "This is item 1"
},
{
id: 2,
text: "This is item 2"
},
{
id: 3,
text: "This is item 3"
}
]
};
}
componentDidMount() {
const { items } = this.state;
setTimeout(() => {
this.setState({
items: items.slice(1)
});
}, 3000);
}
render() {
const { items } = this.state;
return (
<div className="App">
<ul>
<Transition
native
keys={items.map(item => item.id)}
config={config.slow}
from={{ opacity: 0 }}
to={{ opacity: 1 }}
>
{items.map(item => styles => {
return <animated.li style={styles}>{item.text}</animated.li>;
})}
</Transition>
</ul>
</div>
);
}
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
我正在尝试做两件事:
1)获得唯一的类别-我的方法是设置一个空集合,依次遍历序列并附加每个列表。
我的代码:
0 [Pizza]
1 [Mexican, Bars, Nightlife]
2 [American, New, Barbeque]
3 [Thai]
4 [Desserts, Asian, Fusion, Mexican, Hawaiian, F...
6 [Thai, Barbeque]
7 [Asian, Fusion, Korean, Mexican]
8 [Barbeque, Bars, Pubs, American, Traditional, ...
9 [Diners, Burgers, Breakfast, Brunch]
11 [Pakistani, Halal, Indian]
这给了我列中所有列表中包含的一组唯一类别。
2)生成类别计数的饼图,每个餐厅可以属于多个类别。例如:餐厅11属于巴基斯坦,印度和清真食品类别。我的方法是再次遍历类别,然后再进行一系列迭代以获取计数。
有没有更简单或更优雅的方法?
谢谢。
答案 0 :(得分:5)
IIUC:
尝试:
df['category'].apply(pd.Series).stack().value_counts()
输出:
Mexican 3
Barbeque 3
Thai 2
Fusion 2
American 2
Bars 2
Asian 2
Pubs 1
Burgers 1
Traditional 1
Brunch 1
Indian 1
Korean 1
Halal 1
Pakistani 1
Hawaiian 1
Diners 1
Pizza 1
Nightlife 1
New 1
Desserts 1
Breakfast 1
dtype: int64
使用绘图:
df['category'].apply(pd.Series).stack().value_counts().plot.pie()
每个@coldspeed的评论
from itertools import chain
from collections import Counter
pd.DataFrame.from_dict(Counter(chain(*df['category'])), orient='index').sort_values(0, ascending=False)
输出:
Barbeque 3
Mexican 3
Bars 2
American 2
Thai 2
Asian 2
Fusion 2
Pizza 1
Diners 1
Halal 1
Pakistani 1
Brunch 1
Breakfast 1
Burgers 1
Hawaiian 1
Traditional 1
Pubs 1
Korean 1
Desserts 1
New 1
Nightlife 1
Indian 1