【问题标题】:Subtraction and division of columns on a pandas groupby objectpandas groupby 对象上的列减法和除法
【发布时间】:2023-02-04 00:43:48
【问题描述】:

我有一个熊猫数据框:

  Name  Col_1  Col_2 Col_3 
0     A    3     5    5
1     B    1     6    7
2     C    3     7    4
3     D    5     8    3

我需要使用 groupby 创建一个值为 (Col_1-Col_2)/Col_3 的 Series 对象,所以基本上是这样的:

Name
A   (3-5)/5
B   (1-6)/7
C   (3-7)/4
D   (5-8)/3

重复的名称是可能的,因此使用 groupby。 我创建了一个 groupby 对象:

df.groupby['Name']

但似乎没有 groupby 方法适合我正在尝试做的事情。我该如何解决这个问题?

【问题讨论】:

  • 如果同一个 Name 有 2 行,您的公式应该如何显示?
  • 从你的问题中不清楚为什么你需要使用groupby,是否有更多你没有代表的重复名称的数据?
  • 那么公式应该是 (n*Col_1-Col_2)/Col_3。 N 是具有相同名称的行数。至于 2:(2*Col_1-Col_2)/Col_3。 @GuruStron
  • @G.Anderson 你是对的,重复的名字是可能的
  • 然后请更新示例以说明

标签: python python-3.x pandas dataframe group-by


【解决方案1】:

使用pd.Series()方法

res_df = (df['Col_1'] - df['Col_2']) / df['Col_3']
res_df = pd.Series(res_df, name='Result')

print(res_df)

0   -0.400000
1   -0.714286
2   -1.000000
3   -1.000000
Name: Result, dtype: float64

【讨论】:

  • (df['Col_1'] - df['Col_2']) / df['Col_3'] 已经返回了一个 pandas 系列,你有理由再次调用 Series() 吗?你的意思是让它成为一个Dataframe并将索引设置为原始的df索引吗?
【解决方案2】:

咱们试试吧:

df.set_index('Name').eval('(Col_1-Col_2)/Col_3')

输出:

Name
A   -0.400000
B   -0.714286
C   -1.000000
D   -1.000000
dtype: float64

【讨论】:

    猜你喜欢
    • 2020-10-04
    • 2017-10-16
    • 2019-11-18
    • 2016-10-01
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 2023-03-23
    相关资源
    最近更新 更多