python - Pandas DataFrame 自连接 Key1 == Key1 和 Key2 +1 == Key2

标签 python pandas dataframe

有没有办法在 pandas.merge() 期间更改 key ?

我正在尝试加入data其自身 left.person == right.personleft.record +1 == right.record ,这样我就可以用日期时间差 right.date - left.date 填充增量。 .

我正在使用 Python 3.5.1 | IPython 4.1.2 | Anaconda custom (64-bit) | Windows 7

In[38]: data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 11185856 entries, 0 to 11185855
Data columns (total 4 columns):
person    int64
record    int64
date      datetime64[ns]
delta     datetime64[ns]
dtypes: datetime64[ns](2), int64(2)
memory usage: 341.4 MB

In[39]: data.head(5)
Out[37]: 
   person  record       date delta
0       1       1 2015-08-01   NaT
1       1       2 2015-10-18   NaT
2       1       3 2016-02-06   NaT
3       2       1 2015-04-18   NaT
4       2       2 2015-07-11   NaT

这对于 SQL 中的我来说是微不足道的,但是在阅读了有关合并和串联的 pandas-docs 页面后,我仍然不明白。

最佳答案

解决这个问题肯定有很多方法。一种方法(如果有点笨拙)是创建一个新列并合并到该列上,即:

df.loc[:,'RecordOffset'] = df.record + 1
df = df.merge(df, left_on = ['person', 'record'], right_on = ['person', 'RecordOffset'], how = 'left')

执行此操作的另一种方法可能是枢轴,例如:

import datetime
df = pd.DataFrame({'person':[1,1,1,2,2,3,3,3],
                  'record':[1,2,3,1,2,1,2,3],
                  'date' : [datetime.date(2015, 8, i) for i in range(1,9 )]})

df.pivot('person', 'record', 'date')

产量:

record           1           2           3
person                                    
1       2015-08-01  2015-08-02  2015-08-03
2       2015-08-04  2015-08-05         NaN
3       2015-08-06  2015-08-07  2015-08-08

关于python - Pandas DataFrame 自连接 Key1 == Key1 和 Key2 +1 == Key2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36462828/

相关文章:

python - sqlalchemy的数据类型中Varchar和String有什么区别?

python - 了解 Python Pandas 中的 groupby()

python - 对多索引 Pandas 数据框上的重复行求和

python - 使用 Index 与 MultiIndex 的 Pandas Dataframe 日期时间切片

python - 每天重置 Pandas 'Series.rolling'

python - 如何使用 pandas 中的 .at 方法返回特定数据类型?

python - 循环访问数据帧列表时功能不起作用

python - 属性错误: 'AppConfig' object has no attribute 'urls' when trying to runserver

python - 在数据框中使用带有 NaN 的描述来计算有用的订单统计信息

python - 在列 pandas 数据框中的 1 位数字前添加一个零