AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-23260297

iBeMeltin's questions

Martin Hope
iBeMeltin
Asked: 2024-12-17 02:36:41 +0800 CST

电力自动化领域的先进技术条件

  • 5

我有一个流程,负责使用来自电子邮件的文件创建/更新 SharePoint 列表。

本质上,当电子邮件到达时流程就会运行,我会检查电子邮件到达的日期和时间,然后根据日期和时间将文件添加到 SharePoint 列表中。

我需要 SharePoint 列表在特定时间仅包含特定文件。例如:

Any email that arrives between Friday 6pm - Monday 9am need to be put in the same list
Any email that arrives between Monday 6pm - Tuesday 9am need to be put in the same list
Any email that arrives between Tuesday 6pm - Wednesday 9am need to be put in the same list
Any email that arrives between Wednesday 6pm - Thursday 9am need to be put in the same list
Any email that arrives between Thursday 6pm - Friday 9am need to be put in the same list

但是,我在构建条件时遇到了问题。以下是我用来获取日期和时间的表达式:

int(formatDateTime(triggerOutputs()?['body/receivedDateTime'], 'HH'))

dayOfWeek(triggerOutputs()?['body/receivedDateTime'])

我该如何制定我的条件?

power-automate
  • 1 个回答
  • 22 Views
Martin Hope
iBeMeltin
Asked: 2024-11-05 03:36:38 +0800 CST

为表/矩阵视觉效果创建 Dax 查询

  • 6

我有下表:

交易对手表

Counterparty
foo 
boo
fizz
buzz
huzz

表1数据:

Counterparty Commodity DealType   StartDate  FloatPrice  MTMValue
      foo       bar      Buy  07/01/2024       18.73        10
      fizz      bar      Buy  09/01/2024       17.12        10
      fizz      bar      Buy  10/01/2024       17.76        10
      fizz      bar      Buy  11/01/2024       18.72        10
      fizz      bar      Buy  12/01/2024       19.47        10
      foo   ab cred      Buy  01/01/2025       20.26        10
      boo       baz     Sell  01/01/2025       21.04        10
      boo       baz     Sell  01/01/2025       22.23        10
      fizz      baz     Sell  01/01/2025       11.89        10
      fizz      baz     Sell  01/01/2025       12.33        10
      foo       baz     Sell  01/01/2025       14.78        10
      foo       baz     Sell  01/01/2025       18.23        10
      boo      rins     Sell  01/01/2025       16.43        10
      boo   ab cred     Sell  01/01/2025       12.21        10

表 2 数据

Counterparty Commodity DealType   StartDate  FloatPrice  MTMValue
      foo       bar      Buy  07/01/2024       18.73        10
      fizz      bar      Buy  09/01/2024       17.12        10
      fizz      bar      Buy  10/01/2024       17.76        10
      fizz      bar      Buy  11/01/2024       18.72        10
      fizz      bar      Buy  12/01/2024       19.47        10
      foo   ab cred      Buy  01/01/2025       20.26        10
      boo       baz     Sell  01/01/2025       21.04        10
      boo       baz     Sell  01/01/2025       22.23        10
      fizz      baz     Sell  01/01/2025       11.89        10
      fizz      baz     Sell  01/01/2025       12.33        10
      foo       baz     Sell  01/01/2025       14.78        10
      foo       baz     Sell  01/01/2025       18.23        10
      boo      rins     Sell  01/01/2025       16.43        10
      boo   ab cred     Sell  01/01/2025       12.21        10

举例来说,表 1 和表 2 完全相同。实际上,它们的结构相同,但最后一列的值不同。

我如何编写查询来基于这 3 个表创建如下所示的表:

商品 = 条形码

Counterparty  Table1 Sum  Table2 Sum
   foo            10          10
   boo            0           0
   fizz           40          40
   buzz           0           0
   huzz           0           0       

我将在桌子上安装一个切片机来筛选商品

powerbi
  • 1 个回答
  • 21 Views
Martin Hope
iBeMeltin
Asked: 2024-10-12 02:34:16 +0800 CST

将样式应用于表格中的不同列

  • 5

当我使用 reportlab 创建表格时尝试将颜色应用于特定列时出现错误。

下面是我为可重现示例编写的完整脚本(您需要在第 109 行输入输出路径):

import pandas as pd
from datetime import datetime
from reportlab.platypus import Frame
from reportlab.lib.pagesizes import A4, landscape
from reportlab.platypus import PageTemplate
from reportlab.platypus import BaseDocTemplate
from reportlab.platypus import Image
from reportlab.lib.units import inch
from reportlab.platypus import Table, Paragraph
from reportlab.lib import colors
from reportlab.platypus import NextPageTemplate, PageBreak
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle

def on_page(canvas, doc, pagesize=A4):
    page_num = canvas.getPageNumber()
    canvas.drawCentredString(pagesize[0]/2, 50, str(page_num))

    now = datetime.now()
    today = now.strftime("%B %d, %Y")  
    current_time = now.strftime("%I:%M %p") 

    canvas.drawString(50, pagesize[1] - 50, f"{today}")
    canvas.drawString(50, pagesize[1] - 70, f"{current_time}") 

def on_page_landscape(canvas, doc):

  return on_page(canvas, doc, pagesize=landscape(A4))

def format_nums(num):
    if num < 0: 
       x = '(${:.2f})'.format(abs(num))
    elif num > 0:
        x = '${:.2f}'.format(num)
    else:
       x = '${:.0f}'.format(num)

    return x

def df2table(df, custom_style):
    for col in df.columns:
        if df[col].dtype == 'float64':
            df[col] = df[col].apply(lambda x: format_nums(x)) 

    #('BACKGROUND', (start_col, start_row), (end_col, end_row), color)
    return Table(
        [[Paragraph(col, custom_style) for col in df.columns]] + df.values.tolist(),
        style = [
        ('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),  # Header font
        ('FONTSIZE', (0, 1), (-1, -1), 8),  # Body font size
        ('TEXTCOLOR', (0, 0), (-1, 0), colors.white),  # Header text color
        ('BACKGROUND', (0, 0), (-1, 0), colors.lightgrey),  # Header background color
        ('BACKGROUND', (0, 0), (0, 0), colors.lightblue),  # first Header background color
        ('BACKGROUND', (0, 1), (0, -1), colors.lightblue),  # First column background color
        ('LINEBELOW', (0, 0), (-1, 0), 1, colors.black),  # Line below header
        ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black),  # Inner grid lines
        ('BOX', (0, 0), (-1, -1), 1, colors.black)],  # Outer box
        hAlign = 'LEFT')

def df2table2(df, custom_style, commodity_cols):
    for col in df.columns:
        if df[col].dtype == 'float64':
            df[col] = df[col].apply(lambda x: format_nums(x))

    data = [[Paragraph(col, custom_style) for col in df.columns]] + df.values.tolist()
    
    #('BACKGROUND', (start_col, start_row), (end_col, end_row), color)
    style = [
        ('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),  # Header font
        ('FONTSIZE', (0, 1), (-1, -1), 8),  # Body font size
        ('TEXTCOLOR', (0, 0), (-1, 0), colors.white),  # Header text color
        ('BACKGROUND', (0, 0), (-1, 0), colors.lightgrey),  # Header background color
        ('LINEBELOW', (0, 0), (-1, 0), 1, colors.black),  # Line below header
        ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black),  # Inner grid lines
        ('BOX', (0, 0), (-1, -1), 1, colors.black)]  # Outer box
    
    # Apply colors based on column types
    for i, col in enumerate(df.columns): 
        if col in commodity_cols:
            style.append(('BACKGROUND', (i, 1), (i, -1), colors.lightgrey))  # Commodity column
        else:
            if col != 'Counterparty':
                style.append(('BACKGROUND', (i, 1), (i, -1), colors.lightgreen))  # Aggregation column

    return Table(data, style, hAlign='LEFT')

df = pd.DataFrame({
        'Counterparty': ['foo', 'fizz', 'fizz', 'fizz','fizz', 'foo'],
        'Commodity': ['bar', 'bar', 'bar', 'bar','bar', 'ab cred'],
        'DealType': ['Buy', 'Buy', 'Buy', 'Buy', 'Buy', 'Buy'],
        'StartDate': ['07/01/2024', '09/01/2024', '10/01/2024', '11/01/2024', '12/01/2024', '01/01/2025'],
        'FloatPrice': [18.73, 17.12, 17.76, 18.72, 19.47, 20.26],
        'MTMValue':[10, 10, 10, 10, 10, 10]
        })

commodity_cols = df['Commodity'].unique()

out = pd.pivot_table(df, values = 'MTMValue', index='Counterparty', columns = 'Commodity', aggfunc='sum').reset_index().rename_axis(None, axis=1).fillna(0)
out['Cumulative Exposure'] = out[out.columns[1:]].sum(axis = 1)

path = <INSERT PDF OUTPUT FILE HERE>

padding = dict(
    leftPadding=72, 
    rightPadding=72,
    topPadding=72,
    bottomPadding=18)

portrait_frame = Frame(0, 0, *A4, **padding)
landscape_frame = Frame(0, 0, *landscape(A4), **padding)
            
portrait_template = PageTemplate(
    id='portrait', 
    frames=portrait_frame,
    onPage=on_page, 
    pagesize=A4)

landscape_template = PageTemplate(
    id='landscape', 
    frames=landscape_frame, 
    onPage=on_page_landscape, 
    pagesize=landscape(A4))

doc = BaseDocTemplate(
    path,
    pageTemplates=[
    #portrait_template
    landscape_template
    ]
)

styles = getSampleStyleSheet()
custom_style = ParagraphStyle(name='CustomStyle', fontSize=8)

# NOT WOKRING
#story = [
#    Paragraph('Title 1', styles['Title']),
#    Paragraph('Title 2', styles['Title']),
#    Paragraph("<br/><br/>", styles['Normal']),
#    Paragraph('Current Total Positions', styles['Heading2']),
#    df2table2(out, custom_style, commodity_cols)
#]

# WORKING
story = [
    Paragraph('Title 1', styles['Title']),
    Paragraph('Tilte 2', styles['Title']),
    Paragraph("<br/><br/>", styles['Normal']),
    Paragraph('Current Total Positions', styles['Heading2']),
    df2table(out, custom_style)
]

doc.build(story)

我的问题出现在df2table2函数中的某个地方,并带有完整的错误消息:

unsupported operand type(s) for -=: 'float' and 'tuple'

我已经看了好几个小时了,但无论如何也想不出到底出了什么问题。有什么想法可以解决吗?

python
  • 1 个回答
  • 44 Views
Martin Hope
iBeMeltin
Asked: 2024-10-11 22:45:12 +0800 CST

在转换为报告实验室之前对数据框中的列进行排序

  • 6

我正在使用基于多个 pandas 数据框的报告实验室创建一份 pdf 报告。

pdf 中显示的表格需要按特定顺序排列列。

这是一个示例数据框:

df = pd.DataFrame({
        'Counterparty': ['foo', 'fizz', 'fizz', 'fizz','fizz', 'foo'],
        'Commodity': ['bar', 'bar', 'bar', 'bar','bar', 'ab cred'],
        'DealType': ['Buy', 'Buy', 'Buy', 'Buy', 'Buy', 'Buy'],
        'StartDate': ['07/01/2024', '09/01/2024', '10/01/2024', '11/01/2024', '12/01/2024', '01/01/2025'],
        'FloatPrice': [18.73, 17.12, 17.76, 18.72, 19.47, 20.26],
        'MTMValue':[10, 10, 10, 10, 10, 10]
        })

out = pd.pivot_table(df, values = 'MTMValue', index='Counterparty', columns = 'Commodity', aggfunc='sum').reset_index().rename_axis(None, axis=1).fillna(0)
out['Cumulative Exposure'] = out[out.columns[1:]].sum(axis = 1)

 Counterparty  ab cred   bar  Cumulative Exposure
0         fizz      0.0  40.0                 40.0
1          foo     10.0  10.0                 20.0

我需要这个:

Counterparty      bar   ab cred  Cumulative Exposure
0         fizz     40.0  0.0                 40.0
1          foo     10.0  10.0                 20.0

其中ab cred总是位于cumulative exposure最后一个 之前和之后commodity,因为可以x向数据中添加一定数量的商品(总是包含在商品中)。 之后还可以随时ab cred添加更多列。cumulative exposure

python
  • 2 个回答
  • 34 Views
Martin Hope
iBeMeltin
Asked: 2024-10-03 21:51:07 +0800 CST

使用 groupby.agg 在数据框中添加特定值

  • 6

我正在处理包含不可用格式数据的文件。处理完其中一个文件后,我剩下一个数据框和一个奇异值。

数据框如下所示:

 df = pd.DataFrame({
        'A': ['foo', 'foo', 'foo', 'fizz', 'fizz', 'fizz', 'fizz'],
        'B': ['bar', 'bar', 'bar', 'buzz', 'buzz', 'buzz', 'baz'],
        'C': [10,10,10,10,10,10,10]
        })

 val = 20.0

该值不应该是我的数据框的一部分,但需要包含在我的 TOTAL 计算中。这是我将其读入数据框后从文件中提取它的方法(它返回一个字符串,因此我将其转换为浮点数):

if len(df.loc[df['ID'].eq("Settle"), 'C'].values) > 0:
    temp = df.loc[df['ID'].eq("Settle"), 'C']
    if temp.values[0].isnumeric():
        num = float(temp.values[0])
    else:
        num = 0.0
else:
    num = 0.0

现在我需要处理groupby.agg()以下条件:

  • 如果A == 'foo'我需要将 val 添加到总和中

这是我用来获取 中每个值的总和的基本代码A,但我无法弄清楚如何影响我的条件。我假设我可以使用np.where或,lambda但不确定如何使用它.agg()并实现我的输出。

out = df.groupby(['A'], sort=False, as_index=False).agg({"C":"sum"})

预期输出:

A     C
foo   50
fizz  40
python
  • 1 个回答
  • 25 Views
Martin Hope
iBeMeltin
Asked: 2024-09-18 23:43:26 +0800 CST

创建数据透视表并从另一个数据框添加其他列

  • 5

给定两个格式相同的数据框:

df1

Counterparty  Product  Deal  Date          Value
foo           bar      Buy    01/01/24     10.00
foo           bar      Buy    01/01/24     10.00
foo           bar      Sell   01/01/24     10.00
foo           bar      Sell   01/01/24     10.00
fizz          bar      Buy    01/01/24     10.00
fizz          bar      Buy    01/01/24     10.00
fizz          buzz     Sell   01/01/24     10.00
fizz          buzz     Sell   01/01/24     10.00

df2

Counterparty  Product  Deal  Date          Value
foo           bar      Buy    01/01/24     11.00
foo           bar      Buy    01/01/24     09.00
foo           bar      Sell   01/01/24     09.00
foo           bar      Sell   01/01/24     10.00
fizz          bar      Buy    01/01/24     12.00
fizz          bar      Buy    01/01/24     08.00
fizz          buzz     Sell   01/01/24     09.00
fizz          buzz     Sell   01/01/24     10.00

到目前为止我已经这样做了:

out = pd.pivot_table(df1, values = 'Value', index='Counterparty', columns = 'Product', aggfunc='sum').reset_index().rename_axis(None, axis=1)
out = out.fillna(0)

 Counterparty   bar  buzz
0         fizz  20.0  20.0
1          foo  40.0   0.0 

购买我如何旋转这些来创建像这样的视觉效果:

Counterparty  Bar  Buzz  Total  col1 col2
foo           40    0      40    39    1
fizz          20    20     40    39    1

col1来自哪里df2,和之间col2的区别是什么Totalcol1

样本:

df1 = pd.DataFrame({
    "Counterparty": ["foo", "foo", "foo", "foo", "fizz", "fizz", "fizz", "fizz"],
    "Product": ["bar", "bar", "bar", "bar", "bar", "bar", "buzz", "buzz"],
    "Deal": ["Buy","Buy", "Sell", "Sell", "Buy", "Buy", "Sell", "Sell"],
    "Date": ["01/01/24", "01/01/24", "01/01/24", "01/01/24", "01/01/24", "01/01/24", "01/01/24", "01/01/24"],
    "Value": [10, 10, 10, 10, 10, 10, 10, 10]
    })

df2 = pd.DataFrame({
    "Counterparty": ["foo", "foo", "foo", "foo", "fizz", "fizz", "fizz", "fizz"],
    "Product": ["bar", "bar", "bar", "bar", "bar", "bar", "buzz", "buzz"],
    "Deal": ["Buy","Buy", "Sell", "Sell", "Buy", "Buy", "Sell", "Sell"],
    "Date": ["01/01/24", "01/01/24", "01/01/24", "01/01/24", "01/01/24", "01/01/24", "01/01/24", "01/01/24"],
    "Value": [11, 9, 9, 10, 12, 8, 9, 10]
    })

out = pd.pivot_table(df1, values = 'Value', index='Counterparty', columns = 'Product', aggfunc='sum').reset_index().rename_axis(None, axis=1)
out = out.fillna(0)
python
  • 2 个回答
  • 34 Views
Martin Hope
iBeMeltin
Asked: 2024-09-18 02:33:27 +0800 CST

创建自定义列并附加到矩阵

  • 6

我想创建一个基于多个表的自定义矩阵

给定这样的数据集:

Counterparty  Product  Deal  Date          Value
foo           bar      Buy    01/01/24     10.00
foo           bar      Buy    01/01/24     10.00
foo           bar      Sell   01/01/24     10.00
foo           bar      Sell   01/01/24     10.00
fizz          bar      Buy    01/01/24     10.00
fizz          bar      Buy    01/01/24     10.00
fizz          buzz     Sell   01/01/24     10.00
fizz          buzz     Sell   01/01/24     10.00

我创建了一个这样的矩阵:

Counterparty  Bar  Buzz  Total 
foo           40    0      40   
fizz          20    20     40
Total         60    20     80

使用Counterparty作为行、Product作为列和TotalValue作为值:

--Create Table in model

Combinations = 
CROSSJOIN(
    VALUES('table1'[Counterparty]),
    VALUES('table1'[Product])
)

--Create Measure for calculated totals

TotalValue = 
VAR CurrentCounterparty = SELECTEDVALUE(Combinations[Counterparty])
VAR CurrentProduct = SELECTEDVALUE(Combinations[Product])
VAR TotalValue = CALCULATE(
    SUM('table1'[Value]),
    'table1'[Counterparty] = IF(HASONEVALUE(Combinations[Counterparty]), CurrentCounterparty, 'table1'[Counterparty]),
    'table1'[product] = IF(HASONEVALUE(Combinations[Product]), CurrentProduct, 'table1'[Product])
)
RETURN IF(ISBLANK(TotalValue), FIXED(0, 0), TotalValue)

我还有一个具有不同值的类似表,我需要用它创建自定义列:

Counterparty  Product  Deal  Date          Value
foo           bar      Buy    01/01/24     11.00
foo           bar      Buy    01/01/24     09.00
foo           bar      Sell   01/01/24     09.00
foo           bar      Sell   01/01/24     10.00
fizz          bar      Buy    01/01/24     12.00
fizz          bar      Buy    01/01/24     08.00
fizz          buzz     Sell   01/01/24     09.00
fizz          buzz     Sell   01/01/24     10.00

最终矩阵应如下所示:

Counterparty  Bar  Buzz  Total  col1 col2
foo           40    0      40    39    1
fizz          20    20     40    39    1
Total         60    20     80    78    2

我认为我必须从这两个表中创建一个新表,以便使用正确的值来填充我的列,然后相应地创建度量值,但我不确定如何继续。或者我愿意听取有关不同方法的建议。

编辑:我使用它作为参考,但在示例中,他们在 Excel 中创建所有内容,而我不想那样做,因为我需要Products使用我的表格动态填充。

powerbi
  • 1 个回答
  • 22 Views
Martin Hope
iBeMeltin
Asked: 2024-09-17 01:59:39 +0800 CST

用 0 替换矩阵中的空白单元格

  • 6

我正在尝试在 power bi 中显示一个矩阵,但有些单元格显示为空白而不是 0。

我创建了一个计算表,并在该表内创建了一个度量,用作Values矩阵的参数,如下所示:

Value = IF(ISBLANK(SUM(Sell[Value])), 0, SUM(Sell[Value]) + 0)

或者

Value = SUM(Sell[Value]) + 0

在寻找实现结果集的方法时,我看到了这两个选项,但没有得到预期的输出。有没有办法实现这一点?

样本:

主表:

Counterparty  Product  Deal  Date          Value
foo           bar      Buy    01/01/24     10.00
foo           bar      Buy    01/01/24     10.00
foo           bar      Sell   01/01/24     10.00
foo           bar      Sell   01/01/24     10.00
fizz          bar      Buy    01/01/24     10.00
fizz          bar      Buy    01/01/24     10.00
fizz          buzz     Sell   01/01/24     10.00
fizz          buzz     Sell   01/01/24     10.00

计算表

Sell = FILTER('Table', 'Table'[Deal] = "Sell")

Counterparty  Product  Deal  Date          Value
foo           bar      Sell   01/01/24     10.00
foo           bar      Sell   01/01/24     10.00
fizz          buzz     Sell   01/01/24     10.00
fizz          buzz     Sell   01/01/24     10.00

我为每个表创建一个矩阵,以 Counterparty为行,以Product为列,并为每个表中创建的值参数创建上述度量。

销售表的输出:

Counterparty   BAR      BUZZ
foo           20.00   (blank)
fizz         (blank)   20.00

销售表的预期产出:

Counterparty   BAR      BUZZ
foo           20.00      0
fizz            0     20.00
powerbi
  • 1 个回答
  • 61 Views
Martin Hope
iBeMeltin
Asked: 2024-09-16 23:09:50 +0800 CST

在查询编辑器中创建 dax 查询以将表拆分为多个表

  • 6

给定这种类型的表结构:

Counterparty  Product  Deal  Date          Value
foo           bar      Buy    01/01/24     10.00
foo           bar      Buy    01/01/24     10.00
foo           bar      Sell   01/01/24     10.00
foo           bar      Sell   01/01/24     10.00
fizz          buzz     Buy    01/01/24     10.00
fizz          buzz     Buy    01/01/24     10.00
fizz          buzz     Sell   01/01/24     10.00
fizz          buzz     Sell   01/01/24     10.00

我需要再创建两个如下所示的表:

Counterparty  Product  Deal  Date          Value
foo           bar      Buy    01/01/24     10.00
foo           bar      Buy    01/01/24     10.00
fizz          buzz     Buy    01/01/24     10.00
fizz          buzz     Buy    01/01/24     10.00

和

Counterparty  Product  Deal  Date          Value
foo           bar      Sell   01/01/24     10.00
foo           bar      Sell   01/01/24     10.00
fizz          buzz     Sell   01/01/24     10.00
fizz          buzz     Sell   01/01/24     10.00

我是 Power Bi 新手,但在查询编辑器中,如何根据如上所示的某些条件创建另外两个表?我还需要保留主表。在查询编辑器中可以实现这样的功能吗?

编辑:我可以使用 pandas 运行 python 脚本,如下所示:

import pandas as pd

df = pd.DataFrame(dataset)
df = df[df['DealType'].eq('Buy/Sell')]

但我想知道与此相当的 DAX

powerbi
  • 1 个回答
  • 25 Views
Martin Hope
iBeMeltin
Asked: 2024-09-13 08:07:19 +0800 CST

使用两个具有相同结构的表执行聚合

  • 7

我有两个表包含相同类型的数据,一个表包含当前日期,另一个表包含前一天数据:

当前的:

CREATE TABLE Current (
    Col1 VARCHAR(50),
    Col2 VARCHAR(10), 
    Col3 VARCHAR(2), 
    Col4 DATE,       
    Col5 INT,         
    Col6 NUMERIC(5,2)
);

INSERT INTO Current (Col1, Col2, Col3, Col4, Col5, Col6)
VALUES 
('ItemA', CASE WHEN LEFT('Ho', 1) = UPPER(LEFT('Ho', 1)) THEN 'Sell' ELSE 'Buy' END, 'Ho', '2025-07-01', 12345, 10.50),
('ItemA', CASE WHEN LEFT('oH', 1) = UPPER(LEFT('oH', 1)) THEN 'Sell' ELSE 'Buy' END, 'oH', '2025-08-01', 23456, 20.75),
('ItemB', CASE WHEN LEFT('Br', 1) = UPPER(LEFT('Br', 1)) THEN 'Sell' ELSE 'Buy' END, 'Br', '2025-07-01', 34567, 30.80),
('ItemC', CASE WHEN LEFT('rB', 1) = UPPER(LEFT('rB', 1)) THEN 'Sell' ELSE 'Buy' END, 'rB', '2025-09-01', 45678, 40.25),
('ItemC', CASE WHEN LEFT('Ho', 1) = UPPER(LEFT('Ho', 1)) THEN 'Sell' ELSE 'Buy' END, 'Ho', '2025-08-01', 56789, 50.60),
('ItemD', CASE WHEN LEFT('Br', 1) = UPPER(LEFT('Br', 1)) THEN 'Sell' ELSE 'Buy' END, 'Br', '2025-09-01', 67890, 60.10),
('ItemE', CASE WHEN LEFT('rB', 1) = UPPER(LEFT('rB', 1)) THEN 'Sell' ELSE 'Buy' END, 'rB', '2025-07-01', 78901, 70.95),
('ItemE', CASE WHEN LEFT('Ho', 1) = UPPER(LEFT('Ho', 1)) THEN 'Sell' ELSE 'Buy' END, 'Ho', '2025-08-01', 89012, 15.35);

以前的:

CREATE TABLE Previous (
    Col1 VARCHAR(50),
    Col2 VARCHAR(10), 
    Col3 VARCHAR(2), 
    Col4 DATE,       
    Col5 INT,         
    Col6 NUMERIC(5,2)
);

INSERT INTO Previous (Col1, Col2, Col3, Col4, Col5, Col6)
VALUES 
('ItemA', CASE WHEN LEFT('Ho', 1) = UPPER(LEFT('Ho', 1)) THEN 'Sell' ELSE 'Buy' END, 'Ho', '2025-07-01', 12350, 10.55),
('ItemA', CASE WHEN LEFT('oH', 1) = UPPER(LEFT('oH', 1)) THEN 'Sell' ELSE 'Buy' END, 'oH', '2025-08-01', 23461, 20.80),
('ItemB', CASE WHEN LEFT('Br', 1) = UPPER(LEFT('Br', 1)) THEN 'Sell' ELSE 'Buy' END, 'Br', '2025-07-01', 34572, 30.85),
('ItemC', CASE WHEN LEFT('rB', 1) = UPPER(LEFT('rB', 1)) THEN 'Sell' ELSE 'Buy' END, 'rB', '2025-09-01', 45683, 40.30),
('ItemC', CASE WHEN LEFT('Ho', 1) = UPPER(LEFT('Ho', 1)) THEN 'Sell' ELSE 'Buy' END, 'Ho', '2025-08-01', 56794, 50.65),
('ItemD', CASE WHEN LEFT('Br', 1) = UPPER(LEFT('Br', 1)) THEN 'Sell' ELSE 'Buy' END, 'Br', '2025-09-01', 67905, 60.15),
('ItemE', CASE WHEN LEFT('rB', 1) = UPPER(LEFT('rB', 1)) THEN 'Sell' ELSE 'Buy' END, 'rB', '2025-07-01', 78916, 70.90),
('ItemE', CASE WHEN LEFT('Ho', 1) = UPPER(LEFT('Ho', 1)) THEN 'Sell' ELSE 'Buy' END, 'Ho', '2025-08-01', 89027, 15.40);

我使用这两个表运行此查询:

SELECT Col1, SUM(Col5) AS 'sum', 'C' AS 'Flag'
FROM Current
GROUP BY Col1
UNION
SELECT Col1, SUM(Col5) AS 'sum', 'P' AS 'Flag'
FROM Previous
GROUP BY Col1
ORDER BY Col1;

返回:

Col1    Sum    Flag
ItemA   35801   C
ItemA   35811   P
ItemB   34567   C
ItemB   34572   P
ItemC   102477  P
ItemC   102467  C
ItemD   67905   P
ItemD   67890   C
ItemE   167913  C
ItemE   167943  P

为了清晰起见,我添加了标志列,以便您可以知道值来自哪里。我需要编辑此查询以返回如下表:

Col1    Current Sum Previous Sum    Difference
ItemA   35811.          35801           10
ItemB   34572           34567            5
ItemC   102477          102467          10
ItemD   67905           67890           15
ItemE   167943          167913          30

但由于表是相同的,我无法弄清楚如何选择要聚合的正确值。

编辑:我应该注意到,表格显示当天数据和前一天数据,因此任一表格都可能包含不匹配的值。例如,一行数据可以“过期”,并且仅包含在前一个表格中,而不包含在当前表格中。一行也可以“添加”,并且仅包含在当前表格中,而不包含在前一个表格中。在这些情况下,需要将一个值填充为 0

sql
  • 2 个回答
  • 77 Views
Martin Hope
iBeMeltin
Asked: 2024-05-24 03:49:33 +0800 CST

当同一行中存在 NaN 值时返回特定列值

  • 6

我将数据框与静态数据框(电子表格中的表格)合并,生成的数据框如下所示:

Counterparty    DealType       Commodity   Product     
        Aron      Buy           AAA         NaN  
        Aron      Buy           AAA         NaN  
        Aron      Buy           AAA         NaN  
        Aron      Buy           BBB         prod1  
        Aron      Buy           BBB         prod1  
        Aron      Buy           BBB         prod1  
        Aron      Buy          CCC          NaN  
        Aron      Buy          CCC          NaN  
        Aron      Buy          CCC          NaN 

如果数据帧的产品列中没有 NaN 值,则合并成功,我的程序可以继续。

但是,如果产品列中确实存在 NaN 值,我需要使用缺失的值更新我的电子表格。

这是我的代码,如果有任何 NaN 值,它会返回 true:

if (df['Product'].isnull().any()):
    print('missing values found')
    # get list of missing values
    sys.exit(0)

但我想返回缺失值的列表,例如['AAA', 'CCC']

python
  • 1 个回答
  • 30 Views
Martin Hope
iBeMeltin
Asked: 2024-04-23 02:15:48 +0800 CST

根据不同列的值移动数据框中的数据

  • 7

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

Put/Call StrikePrice fixedprice floatprice fixedspread floatspread
Put          10           0         20           0           0
Put          10           0         20           0           0
nan           0           0          0           13          15
nan           0           0          0           14          16

如果看跌/看涨列的值为“Put”,我需要从执行价格列中取出值并将其放入固定点差列中,并且需要从浮动价格列中取出值并将其放入浮动中传播列。一旦这些值位于正确的位置,我就可以去掉看跌/看涨列、执行价格列、浮动价格列和固定价格列。 

输出应如下所示:

  fixedspread floatspread
       10          20
       10          20
       13          15
       14          16
python
  • 2 个回答
  • 42 Views
Martin Hope
iBeMeltin
Asked: 2024-04-17 02:50:15 +0800 CST

删除所有列值,但检查是否存在任何元组

  • 6

我有多个数据框,它们使用相同的函数来删除所有值。然而,有些值是元组,每当我遇到剥离元组时它就会抛出错误。

我的函数如下所示:

for col in df.columns:
        if df[col].dtype == 'object':   
            df[col] = df[col].apply(lambda x: str(x).strip())

我有另一个针对特定数据框的函数,该数据框始终具有元组:

for col in df.columns:
        if df[col].dtype == 'object':   
            df[col] = df[col].apply(lambda x: str(x).strip())

    df['Commodity'] = [(x.strip() for x in ls) for ls in df['Commodity'].values]
    df['Commodity'] = df['Commodity'].apply(sorted)

第二个函数在到达 Commodity 列时总是会抛出错误,因为它不会处理元组。我该如何处理第一个函数中的特定情况?

python
  • 1 个回答
  • 30 Views
Martin Hope
iBeMeltin
Asked: 2024-04-12 05:22:27 +0800 CST

用合并列替换现有列并重命名

  • 6

我正在合并两个数据框。第一个数据框如下所示:

A       B        C           D
party1  asset1   product1    Buy
party1  asset1   product2    Sell
party2  asset2   product1    Buy
party2  asset2   product2    Sell

第二个数据框如下所示:

A       B        D
party1  asset1   Buy
party1  asset1   Sell
party2  asset2   Buy
party2  asset2   Sell

我像这样合并数据框:

df2 = df.merge(df1, on=['A', 'B', 'D'])

返回:

A       B        D      C
party1  asset1   Buy    product1
party1  asset1   Sell   product2
party2  asset2   Buy    product1
party2  asset2   Sell   product2

我需要将“B”列中的值替换为“C”列中的值,同时保留相同的名称“B”。

A       B          D      
party1  product1   Buy    
party1  product2   Sell   
party2  product1   Buy    
party2  product2   Sell   

任何有关如何实现这一目标的建议都会有所帮助。

python
  • 2 个回答
  • 34 Views
Martin Hope
iBeMeltin
Asked: 2024-04-12 02:10:30 +0800 CST

从 groupby 执行计算后创建新的数据框

  • 6

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

ID  TradeDate    party    Deal   Asset  Start       Expire      Fixed   Quantity  MTM      Float
1   04/11/2024   party1   Sell   HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Sell   HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Sell   HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Buy    HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Buy    HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Sell   WTI    01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Sell   WTI    01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Buy    WTI    01/01/2024  02/01/2024  10.00   1000     2500.00   10.00

我按开始、资产和交易对数据进行分组,然后执行计算将数据帧转换为:

groups = df.groupby(['Start', 'Asset', 'Deal'])

ID  TradeDate    party    Deal   Asset  Start       Expire      Fixed   Quantity  MTM      Float
1   04/11/2024   party1   Sell   HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Sell   HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Sell   HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
total                                                                   3000     7500.00   

ID  TradeDate    party    Deal   Asset  Start       Expire      Fixed   Quantity  MTM      Float
1   04/11/2024   party1   Buy    HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Buy    HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
total                                                                   3000     5000.00   

ID  TradeDate    party    Deal   Asset  Start       Expire      Fixed   Quantity  MTM      Float
1   04/11/2024   party1   Sell   WTI    01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Sell   WTI    01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
total                                                                   3000     5000.00   

ID  TradeDate    party    Deal   Asset  Start       Expire      Fixed   Quantity  MTM      Float
1   04/11/2024   party1   Buy    WTI    01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
total                                                                   1000     2500.00   

我的目标是再次转换这些组,以便我可以只输出我需要的数据。此步骤的预期输出应如下所示:

party   Deal  Asset Start        MTM       Float
party1  Sell  HO    01/01/2024   7500.00   10.00 
party1  Buy   HO    01/01/2024   5000.00   10.00
party1  Sell  WTI   01/01/2024   5000.00   10.00
party1  Buy   WTi   01/01/2024   2500.00   10.00                                                         

我需要执行另一次某种分组吗?或者还有其他功能可以实现这一目标吗?任何建议都会有所帮助。

注意:在第二步中,这些是来自列表的单独数据帧。您可能需要一个中间步骤将它们连接在一起,然后得到最终输出。

python
  • 1 个回答
  • 30 Views
Martin Hope
iBeMeltin
Asked: 2024-01-31 03:34:25 +0800 CST

将数据分组在一起并在数据框中保留分组

  • 6

我有一个数据框:

ID   Deal  Party  Commodity       startdate  enddate  price    quantity  mtmvalue
---- ----- -----  ---------       ---------  -------  ------   --------  ---------
J1   Sell   J   (stock1, stock2)   01Jan23   01Feb23   10.00      10      100.00
J4   Buy    J   (stock1, stock2)   01Jan23   01Feb23   5.00       5       25.00
J2   Sell   J   (stock1, stock2)   01Jan23   01Feb23   10.00      10      100.00
J3   Buy    J   (stock1, stock2)   01Jan23   01Feb23   5.00       10      50.00

我需要按交易、商品和开始日期将数据分组在一起,以便我的数据框如下所示:

ID   Deal  Party  Commodity       startdate  enddate  price    quantity  mtmvalue
---- ----- -----  ---------       ---------  -------  ------   --------  ---------
J1   Sell   J   (stock1, stock2)   01Jan23   01Feb23   10.00      10      100.00
J2   Sell   J   (stock1, stock2)   01Jan23   01Feb23   10.00      10      100.00
J3   Buy    J   (stock1, stock2)   01Jan23   01Feb23   5.00       10      50.00
J4   Buy    J   (stock1, stock2)   01Jan23   01Feb23   5.00       5       25.00

我这样做将创建两个组,但我希望它在一个数据框中:

df.groupby(['Deal', 'Commodity', StartDate'])

我如何保留原始数据框中的分组?

python
  • 1 个回答
  • 36 Views
Martin Hope
iBeMeltin
Asked: 2024-01-31 00:35:18 +0800 CST

groupby 多列并将结果广播回数据帧中的每一行

  • 6

我之前已经发布过这个问题,但由于提出了类似的问题,它一直被关闭,但这些解决方案在这里对我没有帮助。

我有一个数据框,需要按 3 个不同的列进行分组。根据结果​​分组,我需要执行计算,然后将结果应用到新列中的每一行。

我的数据如下所示:

ID   Deal  Party  Commodity       startdate  enddate  fixedpricestrike  quantity  mtmvalue
---- ----- -----  ---------       ---------  -------  ----------------  --------  ---------
J1   Sell   J   (stock1, stock2)   01Jan23   01Feb23        10.00          10      100.00
J2   Sell   J   (stock1, stock2)   01Jan23   01Feb23        10.00          10      100.00
J3   Buy    J   (stock1, stock2)   01Jan23   01Feb23        5.00           10      50.00
J4   Buy    J   (stock1, stock2)   01Jan23   01Feb23        5.00           5       25.00

我的目标是按 [交易、商品、开始日期] 对数据进行分组,以便结果数据如下所示:

ID   Deal  Party  Commodity       startdate  enddate  fixedpricestrike  quantity  mtmvalue
---- ----- -----  ---------       ---------  -------  ----------------  --------  ---------
J1   Sell   J   (stock1, stock2)   01Jan23   01Feb23        10.00          10      100.00
J2   Sell   J   (stock1, stock2)   01Jan23   01Feb23        10.00          10      100.00

ID   Deal  Party  Commodity       startdate  enddate  fixedpricestrike  quantity  mtmvalue
---- ----- -----  ---------       ---------  -------  ----------------  --------  ---------
J3   Buy    J   (stock1, stock2)   01Jan23   01Feb23        5.00           10      50.00
J4   Buy    J   (stock1, stock2)   01Jan23   01Feb23        5.00           5       25.00

由此,我需要使用公式来计算“fprice”并将其添加到每一行,如下所示:

ID   Deal  Party  Commodity       startdate  enddate  fixedpricestrike  quantity  mtmvalue fprice
---- ----- -----  ---------       ---------  -------  ----------------  --------  --------- -----
J1   Sell   J   (stock1, stock2)   01Jan23   01Feb23        10.00          10      100.00    0
J2   Sell   J   (stock1, stock2)   01Jan23   01Feb23        10.00          10      100.00    0

ID   Deal  Party  Commodity       startdate  enddate  fixedpricestrike  quantity  mtmvalue fprice
---- ----- -----  ---------       ---------  -------  ----------------  --------  --------- -----
J3   Buy    J   (stock1, stock2)   01Jan23   01Feb23        5.00           10      50.00     1.25
J4   Buy    J   (stock1, stock2)   01Jan23   01Feb23        5.00           10      25.00     1.25

我的问题在于下一步,当我尝试将 fprice 添加回原始数据帧时,我有这行代码:

df['fprice'] = df.groupby(['StartDate', 'Commodity', 'Deal']).apply(lambda group: -(group['MTMValue'].sum() - (group['FixedPriceStrike'] * group['Quantity']).sum()) / group['Quantity'].sum()).reset_index(drop=True)

返回此数据框:

ID   Deal  Party  Commodity       startdate  enddate  fixedpricestrike  quantity  mtmvalue fprice
---- ----- -----  ---------       ---------  -------  ----------------  --------  --------- -----
J1   Sell   J   (stock1, stock2)   01Jan23   01Feb23        10.00          10      100.00    0
J2   Sell   J   (stock1, stock2)   01Jan23   01Feb23        10.00          10      100.00    1.25
J3   Buy    J   (stock1, stock2)   01Jan23   01Feb23        5.00           10      50.00     
J4   Buy    J   (stock1, stock2)   01Jan23   01Feb23        5.00           10      25.00     

当结果应该看起来像

ID   Deal  Party  Commodity       startdate  enddate  fixedpricestrike  quantity  mtmvalue fprice
---- ----- -----  ---------       ---------  -------  ----------------  --------  --------- -----
J1   Sell   J   (stock1, stock2)   01Jan23   01Feb23        10.00          10      100.00    0
J2   Sell   J   (stock1, stock2)   01Jan23   01Feb23        10.00          10      100.00    0
J3   Buy    J   (stock1, stock2)   01Jan23   01Feb23        5.00           10      50.00     1.25
J4   Buy    J   (stock1, stock2)   01Jan23   01Feb23        5.00           10      25.00     1.25

我对使用 pandas 也比较陌生,我不确定为什么我的结果会这样。任何建议都会有所帮助

python
  • 1 个回答
  • 61 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve