Pandas Dataframe 中多列的返回值频率,python
Returning Value Frequency from Multiple Columns in Pandas Dataframe, python
我正在使用一个 pandas 数据框,该数据框有多个列填充了来自同一组的值,类似于此:
Name
First Car
Second Car
Third Car
Fourth Car
Tom
VW
Ford
Honda
Audi
Tim
BMW
Honda
Audi
Ford
Sam
Audi
Honda
Honda
Audi
Bill
Ford
Ford
null
Audi
Mark
VW
Ford
Honda
null
我需要把它变成这样:
Make
First Car
Second Car
Third Car
Fourth Car
VW
2
0
0
0
Ford
1
3
0
1
Honda
0
2
3
0
Audi
1
0
1
3
BMW
1
0
0
0
这似乎可以通过多列 groupby 或交叉表来实现,但我不太清楚如何实现。我假设 pandas 有一些不错的技巧可以做到这一点,而无需诉诸遍历每一列(我刚刚开始使用 pandas)?
一些进一步的上下文以防它影响解决方案 - 一旦我重组了信息,我需要使用 matplotlib 将其绘制为堆叠条形图,这样我就可以使用 matplotlib 的 savefig() 函数以编程方式保存视觉对象。
Select 您想要的列,然后将 .value_counts
应用于它们,例如:
df.filter(regex=f'Car$').apply(pd.value_counts)
这会给你:
First Car Second Car Third Car Fourth Car
Audi 1.0 NaN 1.0 3.0
BMW 1.0 NaN NaN NaN
Ford 1.0 3.0 NaN 1.0
Honda NaN 2.0 3.0 NaN
VW 2.0 NaN NaN NaN
我正在使用一个 pandas 数据框,该数据框有多个列填充了来自同一组的值,类似于此:
Name | First Car | Second Car | Third Car | Fourth Car |
---|---|---|---|---|
Tom | VW | Ford | Honda | Audi |
Tim | BMW | Honda | Audi | Ford |
Sam | Audi | Honda | Honda | Audi |
Bill | Ford | Ford | null | Audi |
Mark | VW | Ford | Honda | null |
我需要把它变成这样:
Make | First Car | Second Car | Third Car | Fourth Car |
---|---|---|---|---|
VW | 2 | 0 | 0 | 0 |
Ford | 1 | 3 | 0 | 1 |
Honda | 0 | 2 | 3 | 0 |
Audi | 1 | 0 | 1 | 3 |
BMW | 1 | 0 | 0 | 0 |
这似乎可以通过多列 groupby 或交叉表来实现,但我不太清楚如何实现。我假设 pandas 有一些不错的技巧可以做到这一点,而无需诉诸遍历每一列(我刚刚开始使用 pandas)?
一些进一步的上下文以防它影响解决方案 - 一旦我重组了信息,我需要使用 matplotlib 将其绘制为堆叠条形图,这样我就可以使用 matplotlib 的 savefig() 函数以编程方式保存视觉对象。
Select 您想要的列,然后将 .value_counts
应用于它们,例如:
df.filter(regex=f'Car$').apply(pd.value_counts)
这会给你:
First Car Second Car Third Car Fourth Car
Audi 1.0 NaN 1.0 3.0
BMW 1.0 NaN NaN NaN
Ford 1.0 3.0 NaN 1.0
Honda NaN 2.0 3.0 NaN
VW 2.0 NaN NaN NaN