小编Mar*_*bak的帖子

为什么 groupby 和滚动不能一起工作?

我有一个从 coinmarketcap 上刮下来的 df。我正在尝试计算 close_price 列的波动率指标,但是当我使用 groupby 时,我收到一条错误消息:

final_coin_data['vol'] = final_coin_data.groupby('coin_name')['close_price'].rolling(window=30).std()
TypeError: incompatible index of inserted column with frame index
Run Code Online (Sandbox Code Playgroud)

df 结构('Unnamed:0' 在我加载 CSV 后出现):

    Unnamed: 0  close_price coin_name   date            high_price  low_price    market_cap         open_price  volume
0   1           9578.63     Bitcoin     Mar 11, 2018    9711.89     8607.12      149,716,000,000    8852.78     6,296,370,000
1   2           8866.00     Bitcoin     Mar 10, 2018    9531.32     8828.47      158,119,000,000    9350.59     5,386,320,000
2   3           9337.55     Bitcoin     Mar 09, 2018    9466.35     8513.03      159,185,000,000    9414.69     8,704,190,000
3   1           9578.63     Monero      Mar 11, 2018    9711.89     8607.12 …
Run Code Online (Sandbox Code Playgroud)

python finance dataframe pandas pandas-groupby

6
推荐指数
1
解决办法
2265
查看次数

为什么我会在一个微小的df上使用fast_executemany获得内存错误?

我一直在寻找方法来加速将数据帧推送到sql server,并在这里偶然发现了一种方法.这种方法在速度方面让我感到震惊.使用normal to_sql需要将近2个小时,此脚本在12.54秒内完成,以推动100k行X 100列df.

因此,在使用示例df测试下面的代码之后,我尝试使用具有许多不同数据类型的df(int,string,float,Booleans).但是,我很遗憾看到内存错误.所以我开始减小我的df的大小,看看有什么限制.我注意到,如果我的df有任何字符串,那么我无法加载到SQL Server.我无法进一步隔离这个问题.下面的脚本取自链接中的问题,但是,我添加了一个带字符串的小df.关于如何纠正这个问题的任何建议都会很棒!

import pandas as pd
import numpy as np
import time
from sqlalchemy import create_engine, event
from urllib.parse import quote_plus
import pyodbc

conn =  "DRIVER={SQL Server};SERVER=SERVER_IP;DATABASE=DB_NAME;UID=USER_ID;PWD=PWD"
quoted = quote_plus(conn)
new_con = 'mssql+pyodbc:///?odbc_connect={}'.format(quoted)
engine = create_engine(new_con)


@event.listens_for(engine, 'before_cursor_execute')
def receive_before_cursor_execute(conn, cursor, statement, params, context, executemany):
    print("FUNC call")
    if executemany:
        cursor.fast_executemany = True


table_name = 'fast_executemany_test'
df1 = pd.DataFrame({'col1':['tyrefdg','ertyreg','efdgfdg'],
                   'col2':['tydfggfdgrefdg','erdfgfdgfdgfdgtyreg','edfgfdgdfgdffdgfdg']
                   })



s = time.time()
df1.to_sql(table_name, engine, if_exists = 'replace', chunksize = None) …
Run Code Online (Sandbox Code Playgroud)

python sql-server sqlalchemy pyodbc pandas

6
推荐指数
1
解决办法
3815
查看次数

How to properly apply recursive CTE?

I have a table that contains hospital visits for patients. I am trying to flag visits in which a visits' begin_date overlaps the previous visits' end_date + 90 days. However, the caveat to this is that once a visit is flagged as an overlap visit, that visit should not be used to assess an overlap with another visit. Let me explain with an example.

Table

visitID     patientid    begin_date  end_date
1           23           1/12/2018   1/14/2018
2           23           1/30/2018   2/14/2018
3           23           4/20/2018 …
Run Code Online (Sandbox Code Playgroud)

sql sql-server recursion common-table-expression

6
推荐指数
1
解决办法
77
查看次数

Pandas:比较组内的行

我有一个按“键”分组的数据框。我需要比较每个组中的行,以确定是要保留组中的每一行还是只需要一组中的一行。

在保留一组所有行的条件下:如果有一行颜色为“红色”,面积为“12”,形状为“圆形”,另一行(同一组内)的颜色为“绿色”和“13”的区域和“正方形”的形状,然后我想保留该组中的所有行。否则,如果这种情况不存在,我想保留该组中具有最大 'num' 值的行。

df = pd.DataFrame({'KEY': ['100000009', '100000009', '100000009', '100000009', '100000009','100000034','100000034', '100000034'], 
              'Date1': [20120506, 20120506, 20120507,20120608,20120620,20120206,20120306,20120405],
              'shape': ['circle', 'square', 'circle','circle','circle','circle','circle','circle'],
              'num': [3,4,5,6,7,8,9,10],
              'area': [12, 13, 12,12,12,12,12,12],
              'color': ['red', 'green', 'red','red','red','red','red','red']})


    Date1       KEY        area color   num shape
0   2012-05-06  100000009   12  red     3   circle
1   2012-05-06  100000009   13  green   4   square
2   2012-05-07  100000009   12  red     5   circle
3   2012-06-08  100000009   12  red     6   circle
4   2012-06-20  100000009   12  red     7   circle
5   2012-02-06  100000034   12  red     8   circle
6 …
Run Code Online (Sandbox Code Playgroud)

python pandas pandas-groupby

5
推荐指数
1
解决办法
3199
查看次数

按顺序计算每个组的熊猫

我有一个df,我按两列分组.我想按顺序计算每个组.下面的代码按顺序计算组中的每一行.这似乎比我想象的要容易,但无法弄清楚.

df = pd.DataFrame({
    'Key': ['10003', '10009', '10009', '10009',
            '10009', '10034', '10034', '10034'], 
    'Date1': [20120506, 20120506, 20120506, 20120506,
              20120620, 20120206, 20120206, 20120405],
    'Date2': [20120528, 20120507, 20120615, 20120629,
              20120621, 20120305, 20120506, 20120506]
})


df['Count'] = df.groupby(['Key','Date1']).cumcount() + 1
Run Code Online (Sandbox Code Playgroud)

预期结果:

    Date1       Date2       Key    Count
0   20120506    20120528    10003  1
1   20120506    20120507    10009  2
2   20120506    20120615    10009  2
3   20120506    20120629    10009  2
4   20120620    20120621    10009  3
5   20120206    20120305    10034  4
6   20120206    20120506    10034  4
7   20120405    20120506 …
Run Code Online (Sandbox Code Playgroud)

python group-by dataframe pandas pandas-groupby

5
推荐指数
1
解决办法
94
查看次数

如果在另一个数据框中找到重复项,如何从一个数据框中删除重复项

我有两个数据框,每个数据框都有数百列。

#df1 = 190 columns
#df2 = 262 columns

#subset dataframe
df1 = pd.DataFrame({'Key': ['10003', '10009', '10010', '10034', '10665'], 
               'Num1': [12,13,13,13,13],
               'Color': ['red','orange','red','red','red'],
              'Date1': [20120506, 20120506, 20120506,20120506,20120620],
              'Date2': [20120528, 20120507, 20120615,20120629,20120621]})
df2 = pd.DataFrame({'Key': ['10003', '10009', '10010', '10011', '10012','10034','10034', '10034'], 
               'Num1': [12,13,13,13,13,13,14,14],
               'Num2': [121,122,122,124,125,126,127,128],
              'Date1': [20120506, 20120506, 20120506,20120506,20120620,20120506,20120206,20120405],
              'Date2': [20120528, 20120507, 20120615,20120629,20120621,20120629,20120506,20120506]})
Run Code Online (Sandbox Code Playgroud)

我想删除 df2 中也在 df1 中的所有行,但保持 df1 不变。

使用 pd.concat() 或 merge() 时我非常接近,但问题是我创建了一堆不必要的列 [使用 concat() 和 merge()] 并且仅在 df1 中找到的行被添加到 df2 [与 concat()]。实际上,当“Key”、“Date1”、“Num”和“Date2”在行中常见时,它们可以被视为重复项。

下面的尝试很接近,但它添加了 df1 中的额外列并保留 df1 中的所有额外行。我不需要 df1 …

python merge concatenation dataframe pandas

5
推荐指数
1
解决办法
7163
查看次数

如何在pandas中使用.loc和groupby以及两个条件

在这里问了一个类似的问题,但我想扩展这个问题,因为我被要求做一些不同的地方我不能使用.duplicates()

我有一个按'Key'分组的df.我想标记排放日期与排放日期匹配的组内的任何行和排放日期之间的排,具有排放日期的行具有5-12范围内的num1值.

df =  pd.DataFrame({'Key': ['10003', '10003', '10003', '10003', '10003','10003','10034', '10034'], 
   'Num1': [12,13,13,13,12,13,15,12],
   'Num2': [121,122,122,124,125,126,127,128],
  'admit': [20120506, 20120508, 20121010,20121010,20121010,20121110,20120520,20120520],  'discharge': [20120508, 20120510, 20121012,20121016,20121023,20121111,20120520,20120520]})
df['admit'] = pd.to_datetime(df['admit'], format='%Y%m%d')
df['discharge'] = pd.to_datetime(df['discharge'], format='%Y%m%d')
Run Code Online (Sandbox Code Playgroud)

最初的df

    Key     Num1    Num2    admit       discharge
0   10003   12      121     2012-05-06  2012-05-08
1   10003   13      122     2012-05-08  2012-05-10
2   10003   13      122     2012-10-10  2012-10-12
3   10003   13      124     2012-10-10  2012-10-16
4   10003   12      125     2012-10-10  2012-10-23
5   10003   13      126     2012-11-10  2012-11-11
6   10034   15      127     2012-05-20 …
Run Code Online (Sandbox Code Playgroud)

python pandas

5
推荐指数
1
解决办法
5820
查看次数

如何识别在特定时间范围内发生的行?

我有一张桌子,上面有病人的医院就诊信息。我正在尝试标记上次访问后90天内发生的访问。但是,需要注意的是,一旦将某个访问标记为重复访问,就不应将该访问用于评估与另一个访问的重复。让我举例说明。

visitID     patientid    visit_date  
1           23           1/12/2018
2           23           1/30/2018
3           23           4/20/2018
4           23           5/02/2018
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,患者进行了4次就诊。访问2在访问1的90天内,因此应将访问2标记为重叠。标记访问2后,该行就不应在分析中用于以后的任何访问的重叠标识。从概念上讲,这就像删除访问2并再次开始分析。

过渡阶段(访问2已删除,分析再次开始)

visitID     patientid    visit_date  
1           23           1/12/2018
3           23           4/20/2018
4           23           5/02/2018
Run Code Online (Sandbox Code Playgroud)

因此,即使访问3与访问2重叠,由于从分析中删除了访问2,由于前一次访问(访问1)的距离还不到90天,因此不会标记访问3。最后,应标记4次访问,因为它与未标记的访问重叠。

预期的输出

visitID     patientid    visit_date flag
1           23           1/12/2018  0
2           23           1/30/2018  1
3           23           4/20/2018  0 
4           23           5/02/2018  1
Run Code Online (Sandbox Code Playgroud)

我试图解决这个难题:

WITH overlaps AS 
    (SELECT DISTINCT T2.visit
    FROM visits_table AS T1
    INNER JOIN visits_table AS T2
            ON T1.visit != T2.visit
                AND T2.visit_date BETWEEN T1.visit_date AND DATEADD(DAY, 89, …
Run Code Online (Sandbox Code Playgroud)

sql sql-server overlap common-table-expression

5
推荐指数
1
解决办法
75
查看次数

如何在熊猫中为 concat 添加指标列?

随着merge()有一个指标参数,这样你就可以找出从中df,可以你的原始数据中找到。我没有看到与concat().

pd.merge(left=df1, right=df2, indicator=True)
Run Code Online (Sandbox Code Playgroud)

有没有办法创建一个指标列concat()

python merge concat pandas

4
推荐指数
2
解决办法
1837
查看次数

如何识别指定列范围内的某些行?

我有一个df,我需要在列表中找到任何具有值的行,这些行也位于另一个列表中.
对于此示例,我需要在以"Month"开头的任何列中标识具有值J,Q,R的任何行.
如果列中的任何一个字母存在,则最终的df将有一个显示true或false的列.

df = pd.DataFrame({'KEY': ['1312', '1345', '5555', '5555','5555'], 
              'Month1': [1, 1, 1,1,1],
              'Month2': [1, 1, 'J',1,1],
              'Month3': [1, 1, 1,1,1],
              'Month4': [1, 'J', 1,1,1],
              'Month5': [1, 1, 1,0,0],
              'Month6': [1, 1, 1,0,0],
              'Date1': [20120304, 20120102, 20120203,20120402,4],
              'Date2': [20120405,20120104,20120502,20120501,4],
              'StartMonth': [3,1,1,4,3],
              'EndMonth': [4,1,3,5,5],
              'ID': [1,2,3,3,4]})

df[['KEY','ID','Date1','Date2','StartMonth','EndMonth','Month1', 'Month2','Month3','Month4','Month5','Month6']]
Run Code Online (Sandbox Code Playgroud)

预期结果:

    Date1       Date2       EndMonth    ID  KEY     Month1  Month2  Month3  Month4  Month5  Month6  StartMonth  HemoFacB
0   20120304    20120405    4           1   1312    1       1       1       1       1       1       3           False
1   20120102    20120104    1 …
Run Code Online (Sandbox Code Playgroud)

python pandas

3
推荐指数
1
解决办法
434
查看次数