循环以基于Python Dataframe中的其他列值创建新列[重复]

Posted

技术标签:

【中文标题】循环以基于Python Dataframe中的其他列值创建新列[重复]【英文标题】:Looping to create a new column based on other column values in Python Dataframe [duplicate] 【发布时间】:2019-09-18 18:41:21 【问题描述】:

我想根据多行中的其他列值在 python 数据框中创建一个新列。 例如,我的 python 数据框 df:

A    |    B
------------
10   |    1
20   |    1
30   |    1
10   |    1
10   |    2
15   |    3
10   |    3

我想创建基于变量 A 的值的变量 C,其条件来自多行中的变量 B。当第 i,i+1,... 行中变量 B 的值时,C 的值是这些行中变量 A 的总和。在这种情况下,我的输出数据框将是:

  A   |   B   |   C
--------------------
  10  |   1   |   70
  20  |   1   |   70
  30  |   1   |   70
  10  |   1   |   70
  10  |   2   |   10
  15  |   3   |   25
  10  |   3   |   25

我不知道实现这一目标的最佳方法。有人可以帮忙吗?

提前致谢

【问题讨论】:

df.groupby('B')['A'].transform('sum') 【参考方案1】:

您必须使用groupby() 方法,将B 上的行和A 上的sum() 上的行分组。

df['C'] = df.groupby('B')['A'].transform(sum)

【讨论】:

【参考方案2】:

重新创建数据:

import pandas as pd

A = [10,20,30,10,10,15,10]

B = [1,1,1,1,2,3,3]

df = pd.DataFrame('A':A, 'B':B)

df

     A   B
0   10   1
1   20   1
2   30   1
3   10   1
4   10   2
5   15   3
6   10   3

然后我将从 df 创建一个查找系列:

lookup = df.groupby('B')['A'].sum()
lookup

    A
B
1   70
2   10
3   25

然后我将使用 apply 在 df 上使用该查找

df.loc[:,'C'] = df.apply(lambda row: lookup[lookup.index == row['B']].values[0], axis=1)
df

         A   B    C
    0   10   1   70
    1   20   1   70
    2   30   1   70
    3   10   1   70
    4   10   2   10
    5   15   3   25
    6   10   3   25

【讨论】:

以上是关于循环以基于Python Dataframe中的其他列值创建新列[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 For 循环修改 Pandas 中的 DataFrame 字典

python对dataframe进行操作?

如何从 Python Pandas DataFrame 中的循环结果中删除重复项?

在 Python 中的 For 循环内连接并附加到 DataFrame

((Python)pandas.DataFrame不在每个for循环周期中更新值,为什么?

Python---循环遍历带有数据框的字典