2017-12-02 115 views
1

我想重新采样熊猫数据框并将不同的函数应用于不同的列。问题是我无法正确处理一个字符串的列。我想应用一个将字符串与分隔符(如“ - ”)合并的函数。这是一个数据示例:重新采样熊猫数据框和列中的合并字符串

import pandas as pd 
import numpy as np 
idx = pd.date_range('2017-01-31', '2017-02-03') 
data=list([[1,10,"ok"],[2,20,"merge"],[3,30,"us"]]) 
dates=pd.DatetimeIndex(['2017-01-31','2017-02-03','2017-02-03']) 
d=pd.DataFrame(data, index=,columns=list('ABC')) 

      A B   C 
2017-01-31 1 10   ok 
2017-02-03 2 20  merge 
2017-02-03 3 30   us 

使用求和和平均聚合器工作重新采样数字列A和B.然而,列C与总和(但它被放在第二位,这可能意味着某些失败)的作品。

d.resample('D').agg({'A': sum, 'B': np.mean, 'C': sum}) 

       A    C  B 
2017-01-31 1.0    a 10.0 
2017-02-01 NaN    0 NaN 
2017-02-02 NaN    0 NaN 
2017-02-03 5.0  merge us 25.0 

我希望得到这样的:

... 
2017-02-03 5.0  merge - us 25.0 

我以不同的方式,但没有成功使用lambda试过(未显示)。

如果我可能会问第二个相关问题:我可以为此做一些后处理,但是如何用零或“”填充不同列中的丢失单元格?

+0

IIUC,你可以使用df.fillna(),以填补缺失值。 https://pandas.pydata.org/pandas-docs/stable/missing_data.html – Evan

+0

是的,并且可能对不同的列应用不同的替换(例如0,无,“”)。我想知道在.resample – aless80

回答

1

您的'C'列AGG功能应该是一个join

d.resample('D').agg({'A': sum, 'B': np.mean, 'C': ' - '.join}) 

       A  B   C 
2017-01-31 1.0 10.0   ok 
2017-02-01 NaN NaN    
2017-02-02 NaN NaN    
2017-02-03 5.0 25.0 merge - us 
+0

中有没有更好的方法可以做到这一点啊,所以函数的“输入”是可迭代的,我可以使用一个函数来将迭代作为输入。如果我需要做更有趣的操作,我可以建立一个功能,可以迭代。 奇怪的是,在我的控制台中,我仍然看到列C在第二位。 – aless80