微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

来自带有分类数据和自定义“bins”的 Pandas 数据框列的直方图/值计数

如何解决来自带有分类数据和自定义“bins”的 Pandas 数据框列的直方图/值计数

考虑以下数据框:

export class Users {
    id: number;
    CIN: number;
    name: string;
    address: string;
    email: string;
    username: string;
    password: string;
    permis: string;
    prenom: string;
    image: string; 
    modeAuto: number;
    sex: string;
    dateNais: Date;
    role: string;
}

我想根据一些自定义“bin”来获取数据帧每一列中数据的相对频率,这将是(可能的超集)唯一数据值。例如,如果:

 public urls = 'http://127.0.0.1:8000/api/v1/users'; // url pour la récupération de la partie backend(laravel)

  constructor(private http: HttpClient) { }
  //* afficher tous les conducteurs*/

  getUsers (): Observable<Users[]> {
    return this.http.get<Users[]>(this.urls).filter(x => x.role === 'driver').pipe(
      tap(_ => console.log('fetched Users')),catchError(this.handleError<Users[]>('getUsers',[]))
    );
  }

我想获得:

import pandas as pd

x = pd.DataFrame([[ 'a','b'],['a','c'],['c',['d','c']])
print(x)

   0  1
0  a  b
1  a  c
2  c  b
3  d  c

是否有一个(或两个)班轮来实现这一目标?

解决方法

根据 b 尝试 apply value_counts,然后 reindex

import pandas as pd

x = pd.DataFrame([['a','b'],['a','c'],['c',['d','c']])

b = ['a','b','c','d','e','f']
df = x.apply(lambda s: s.value_counts()).reindex(b).fillna(0).astype(int)

print(df)

df

   0  1
a  2  0
b  0  2
c  1  2
d  1  0
e  0  0
f  0  0

meltcrosstab 选项:

import pandas as pd

x = pd.DataFrame([['a','f']
df = x.melt()
df = pd.crosstab(df['value'],df['variable']) \
    .reindex(b).fillna(0).astype(int) \
    .rename_axis(None,axis=1).rename_axis(None,axis=0)

print(df)

df

   0  1
a  2  0
b  0  2
c  1  2
d  1  0
e  0  0
f  0  0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。