相关疑难解决方法(0)

熊猫合并名称和最近的日期

我试图在名称和最近的日期合并两个数据帧(WRT左手数据帧).在我的研究中,我在这里找到了一个类似的问题,但它也没有考虑到这个名字.从上面的问题看来似乎没有办法用merge做这个,但我看不到另一种方法来做两个不使用pandas merge函数的参数连接.

有合并的方法吗?如果不是这样做的合适方式是什么?

我会发布一份我尝试过的内容,但这是在日期上进行精确合并而无法正常进行的.最重要的一行是我制作data3数据帧的最后一行.

data=pd.read_csv("edgar14Afacts.csv", parse_dates={"dater": [2]}, infer_datetime_format=True)
data2=pd.read_csv("sdcmergersdata.csv", parse_dates={"dater": [17]}, infer_datetime_format=True)
list(data2.columns.values)

data2.rename(columns=lambda x: x.replace('\r\n', ''), inplace=True)
data2.rename(columns=lambda x: x.replace('\n', ''), inplace=True)
data2.rename(columns=lambda x: x.replace('\r', ''), inplace=True)
data2=data2.rename(columns = {'Acquiror Name':'name'})
data2=data2.rename(columns = {'dater':'date'})
data=data.rename(columns = {'dater':'date'})

list(data2.columns.values)

data["name"]=data['name'].map(str.lower)
data2["name"]=data2['name'].map(str.lower)
data2['date'].fillna(method='pad')
data['namer1']=data['name']
data['dater1']=data['date']
data2['namer2']=data2['name']
data2['dater2']=data2['date']

print data.head()
print data2.head()
data['name'] = data['name'].map(lambda x: str(x)[:4])
data2['name'] = data2['name'].map(lambda x: str(x)[:4])

data3 = pd.merge(data, data2, how='left', on=['date','name'])
data3.to_csv("check.csv")
Run Code Online (Sandbox Code Playgroud)

python merge date pandas

12
推荐指数
2
解决办法
6701
查看次数

基于时间戳不完全匹配的pandas合并

有哪些方法可用于合并时间戳不完全匹配的列?

DF1:

date    start_time  employee_id session_id
01/01/2016  01/01/2016 06:03:13 7261824 871631182
Run Code Online (Sandbox Code Playgroud)

DF2:

date    start_time  employee_id session_id
01/01/2016  01/01/2016 06:03:37 7261824 871631182
Run Code Online (Sandbox Code Playgroud)

我可以加入['date','employee_id','session_id'],但有时同一个员工在同一天会有多个相同的会话,这会导致重复.我可以删除发生这种情况的行,但如果我这样做,我将失去有效的会话.

如果DF1的时间戳距离DF2的时间戳<5分钟,并且session_id和employee_id也匹配,是否有一种有效的加入方式?如果存在匹配记录,则时间戳将始终稍晚于DF1,因为事件在将来某个时间点触发.

['employee_id', 'session_id', 'timestamp<5minutes']
Run Code Online (Sandbox Code Playgroud)

编辑 - 我以为有人会遇到这个问题.

我在想这样做:

  1. 在每个数据帧上记下我的时间戳
  2. 创建一个时间戳+ 5分钟(舍入)的列
  3. 创建一个时间戳列 - 5分钟(舍入)
  4. 创建一个10分钟的间隔字符串以加入文件

    df1['low_time'] = df1['start_time'] - timedelta(minutes=5)
    df1['high_time'] = df1['start_time'] + timedelta(minutes=5)
    df1['interval_string'] = df1['low_time'].astype(str) + df1['high_time'].astype(str)
    
    Run Code Online (Sandbox Code Playgroud)

有人知道如何将这5分钟的间隔绕到最近的5分钟标记处吗?

02:59:37 - 5分钟= 02:55:00

02:59:37 + 5分钟= 03:05:00

interval_string = '02:55:00-03:05:00'

pd.merge(df1, df2, how = 'left', on = ['employee_id', 'session_id', 'date', 'interval_string']
Run Code Online (Sandbox Code Playgroud)

有谁知道如何围绕这样的时间?这似乎可行.您仍然根据日期,员工和会话进行匹配,然后查找基本上在相同的10分钟间隔或范围内的时间

python pandas

11
推荐指数
2
解决办法
9247
查看次数

在最近的日期时间/时间戳上合并数据帧

我有两个数据帧,如下所示:

A = pd.DataFrame({"ID":["A", "A", "C" ,"B", "B"], "date":["06/22/2014","07/02/2014","01/01/2015","01/01/1991","08/02/1999"]})

B = pd.DataFrame({"ID":["A", "A", "C" ,"B", "B"], "date":["02/15/2015","06/30/2014","07/02/1999","10/05/1990","06/24/2014"], "value": ["3","5","1","7","8"] })
Run Code Online (Sandbox Code Playgroud)

如下图所示:

>>> A
  ID       date
0  A 2014-06-22
1  A 2014-07-02
2  C 2015-01-01
3  B 1991-01-01
4  B 1999-08-02

>>> B
  ID       date value
0  A 2015-02-15     3
1  A 2014-06-30     5
2  C 1999-07-02     1
3  B 1990-10-05     7
4  B 2014-06-24     8
Run Code Online (Sandbox Code Playgroud)

我想使用最近的日期将A与B的值合并。在此示例中,没有日期匹配,但某些日期可能匹配。

输出应该是这样的:

>>> C
  ID        date value
0  A  06/22/2014     8
1  A  07/02/2014     5 …
Run Code Online (Sandbox Code Playgroud)

python pandas

6
推荐指数
2
解决办法
3263
查看次数

如何基于最近的日期合并两个数据帧

我想基于两列合并两个数据框:"代码"和"日期".可以直接根据"代码"合并数据帧,但是在"日期"的情况下变得棘手 - 在df1和df2中的日期之间没有完全匹配.所以,我想选择最接近的日期.我怎样才能做到这一点?

df = df1[column_names1].merge(df2[column_names2], on='Code')
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

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

标签 统计

pandas ×4

python ×4

dataframe ×1

date ×1

merge ×1