循环以基于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 Pandas DataFrame 中的循环结果中删除重复项?
在 Python 中的 For 循环内连接并附加到 DataFrame