在for循环中将数据帧合并在一起

时间:2016-02-05 17:49:53

标签: python pandas merge

我有一个pandas数据帧字典,每个帧包含与时间戳对应的时间戳和市场上限,其中的键是:

coins = ['dashcoin','litecoin','dogecoin','nxt']

我想在字典中创建一个新密钥' merge'并使用pd.merge方法根据时间戳合并4个现有数据帧(我想要完成的行,因此使用' inner' join方法将是合适的。

其中一个数据框的样本:

data2['nxt'].head()
Out[214]:
timestamp   nxt_cap
0   2013-12-04  15091900
1   2013-12-05  14936300
2   2013-12-06  11237100
3   2013-12-07  7031430
4   2013-12-08  6292640

我目前正在使用此代码获得结果:

data2['merged'] = data2['dogecoin']

for coin in coins:
    data2['merged'] = pd.merge(left=data2['merged'],right=data2[coin], left_on='timestamp', right_on='timestamp')

但这重复了“狗狗币”。在'合并'但是如果data2['merged']不是= data2['dogecoin'](或某些类似数据),那么合并功能将无效,因为&#39中不存在值;合并'

编辑:我想要的结果是在字典中的新元素中创建一个合并的数据框' data2' (data2 ['合并']),包含来自data2中其他元素的合并数据框

2 个答案:

答案 0 :(得分:1)

尝试使用实际命名的df替换广义pd.merge(),但必须至少使用第一个开始数据框:

data2['merged'] = data2['dashcoin']

# LEAVE OUT FIRST ELEMENT
for coin in coins[1:]: 
      data2['merged'] = data2['merged'].merge(data2[coin], on='timestamp')

答案 1 :(得分:0)

由于您已经列出了coins列表,为什么不能像

那样
data2['merged'] = data2[coins[0]]
for coin in coins[1:]:
    data2['merged'] = pd.merge(....

除非我误解,否则这个问题并不是针对数据框架的,而是当第一个元素必须与其他元素区别对待时,它是如何编写循环的。