使用 Pandas 计算 DataFrame 中不同列的值配对

卡兰达什_

我有一个这样的 df:

df = pd.DataFrame([["coffee","soda","coffee","water","soda","soda"],["paper","glass","glass","paper","paper","glass"], list('smlssm')]).T
df.columns = ['item','cup','size']

df:

    item    cup    size
0   coffee  paper   s
1   soda    glass   m
2   coffee  glass   l
3   water   paper   s
4   soda    paper   s
5   soda    glass   m

我想把它变成一个看起来像这样的 df

    item    cup    size  freq
0   coffee  paper   s     1
1   coffee  paper   m     0
2   coffee  paper   l     0
3   coffee  glass   s     0
4   coffee  glass   m     0
5   coffee  glass   l     1
6   soda    paper   s     1
7   soda    paper   m     0
8   soda    paper   l     0
9   soda    glass   s     0
10  soda    glass   m     2
11  soda    glass   l     0
.    .       .      .     .
.    .       .      .     .
.    .       .      .     .

因此,对于每个项目,我想要一行包含罩杯和尺寸的可能组合,以及带有频率的附加行。

使用 Pandas 执行此操作的正确方法是什么?

亨利·埃克

咱们试试吧:

  1. 向数据框中添加一个频率列,以指示每行的值是 1。

  2. groupby sum 获取 DataFrame 中的当前计数。

  3. unique每列中创建一个 MultiIndex

  4. 使用新的midxreindexfill_value=0,这样,当由新创建的索引频率被用0填充。

  5. reset_index 将索引转换回列。

# Columns to Reindex
idx_cols = ['item', 'cup', 'size']
# Create MultIndex With Unique Values
midx = pd.MultiIndex.from_product(
    [df[c].unique() for c in idx_cols],
    names=idx_cols
)
df = (
    df.assign(freq=1)  # Add Freq Column initialzed to 1
        .groupby(idx_cols)['freq'].sum()  # Groupby and Sum freq
        .reindex(midx, fill_value=0)  # reindex
        .reset_index()  # reset_index
)

df

      item    cup size  freq
0   coffee  paper    s     1
1   coffee  paper    m     0
2   coffee  paper    l     0
3   coffee  glass    s     0
4   coffee  glass    m     0
5   coffee  glass    l     1
6     soda  paper    s     1
7     soda  paper    m     0
8     soda  paper    l     0
9     soda  glass    s     0
10    soda  glass    m     2
11    soda  glass    l     0
12   water  paper    s     1
13   water  paper    m     0
14   water  paper    l     0
15   water  glass    s     0
16   water  glass    m     0
17   water  glass    l     0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Pandas MultiIndex DataFrame中的先前值进行计算?

使用行号计算Pandas DataFrame中的新列

使用 Pandas 使用 DataFrame 中的 groupby() 和 sum() 进行计算

在使用python / pandas DataFrame计算值之前验证行

有没有办法将先前计算的行值与 Pandas Dataframe 中不同列的总和一起使用?

计算Pandas DataFrame中的项目

如何计算pandas DataFrame中的nan值?

使用先前计算的值(来自同一列)和来自 Pandas Dataframe 中另一列的值计算值

Python Pandas Dataframe-使用使用行值和列名的计算填充空列

如何计算各列中的变化值-Pandas Dataframe

使用Pandas DataFrame计算每日收益

如何使用Pandas DataFrame计算列表的字典?

使用Pandas DataFrame计算累积收益

使用Pandas DataFrame计算开发因子

使用 groupby 列从 Min 和 Max 列值计算 Pandas Dataframe 的变化率

Python Pandas:使用基于不同列中的分类值的计算创建新列

在Pandas DataFrame上使用groupby添加任意数量的列并计算值

使用Pandas根据两个不同列中的值计算行数

遍历pandas DataFrame以计算新的行值

在Pandas DataFrame中计算重复值

Matplotlib/Seaborn 计算值(Pandas Dataframe)

根据对列中每个不同值具有特定条件的行,在Pandas Dataframe中计算perc

使用 Pandas (python) 列中的起始值计算值

计算pandas DataFrame列中值的频率

Pandas DataFrame计算重复行并填写列

计算pandas DataFrame中的平均numpy数组

计算pandas DataFrame中整行的出现次数

计算Pandas Dataframe的整列

从pandas DataFrame计算pvalue