【问题标题】:Combine some columns in last row of a pandas dataframe合并熊猫数据框最后一行中的一些列
【发布时间】:2021-03-23 17:45:05
【问题描述】:

编辑:我了解如何获取实际值,但我想知道如何将包含这两个总和的行附加到现有的 df 中?

我有一个数据框 score_card,如下所示:

15min_colour 15min_high 15min_price 30min_colour 30min_high 30min_price
1 1 -1 1 -1 1
1 -1 1 1 1 1
-1 1 -1 1 1 1
-1 1 -1 1 -1 1

现在我想添加一行总结所有 15 分钟数字(前 3 列)和 30 分钟数字等等(实际 df 更大)。意味着我不想将各个列相加,而是将列的总和相加。我要添加的行如下所示:

sum_15min_colour&15min_high&15min_price sum_30min_colour&30min_high&30min_price
0 8

请忽略标题,这只是为了说明我打算做什么。 我假设涉及到一个多索引,但我不知道如何将它应用到我现有的 df 以实现所需的输出。

另外,是否可以用整个表格的总和添加一个列?

感谢您的支持。

【问题讨论】:

  • 15分钟组的总和为零...amirite
  • np.sum(df.filter(like='15').values) ???

标签: python pandas dataframe numpy


【解决方案1】:

你可以这样总结:

np.sum(df.filter(like='15').values), np.sum(df.filter(like='30').values)

0,8

【讨论】:

  • 谢谢。请参阅编辑,如何将这些结果附加到现有的 df 中?
  • @Florida_Rolf:它们在附加到原始数据帧后应该是什么样子。因为您将在原始 df 中有 4 列,这将为您提供两列。
  • 这正是我想要解决的问题。有没有办法合并最后一行的 3 列?
  • @Florida_Rolf:我猜这实际上是不可能的。你可以这样做:stackoverflow.com/questions/49533330/…
【解决方案2】:

groupby

可以采用可调用(think 函数)并在 index 或 columns 上使用它

df.groupby(lambda x: x.split('_')[0], axis=1).sum().sum()

15min    0
30min    8
dtype: int64

【讨论】:

  • 谢谢。请参阅编辑,如何将这些结果附加到现有的 df 中?
【解决方案3】:
  • 这取决于轴。

简单地说 - 将轴 0 中的值相加: 所以在你的情况下 - 列(它是垂直列中的所有值)。

df.sum(axis = 0, skipna = True)

打印(df):

输出:

sum_column = df["col1"] + df["col2"]
df["col3"] = sum_column
print(df)

输出:


所以在你的情况下:

summed0Axis = df.sum(axis = 0, skipna = True)
sum_column = summed0Axis["15min_colour"] + summed0Axis["15min_high"] + summed0Axis["15min_price"]

print(sum_column)

更智能的选择:

查找所有列,其中包括 15:

columnsWith15 = df.loc[:,df.columns.str.contains("15").sum]
columnsWith30 = df.loc[:,df.columns.str.contains("30").sum]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 2021-09-02
    • 2018-05-07
    • 1970-01-01
    相关资源
    最近更新 更多