将两个变量解压缩到DataFrame中的两列中

时间:2016-10-21 14:17:07

标签: python pandas dataframe

我有一个名为ReturnDateRange的函数,它将返回两个日期。 我想在名为' zRow'的列上应用此功能。在dataFrame中,将结果存储在两个不同的列中。

以下内容将存储两个结果,作为一列中的元组:

df['t1']= df['zRow'].map(ReturnDateRange)

以下内容返回ValueError:要解压缩的值太多(预期为2)

df['t1'], df['t2']= df['zRow'].map(ReturnDateRange)

但该函数始终返回两个日期,或一个无。

更新:我尝试返回两个零而不是无。仍然会得到同样的错误。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

“解压缩的值太多”错误是因为它解压缩行而不是列。因此转置会有所帮助,但我觉得有一种更好的解决方法。

与此同时,如果不是非常优雅,这也有效......

import pandas as pd
import numpy as np

data = pd.DataFrame(np.zeros(shape=(5,2)),columns=["a","b"])

def mapper(x):
    return ('first', 'second')

data['t1'], data['t2'] = data['b'].map(mapper).apply(pd.Series).values.T

print data

给出这个结果:

     a    b     t1      t2
0  0.0  0.0  first  second
1  0.0  0.0  first  second
2  0.0  0.0  first  second
3  0.0  0.0  first  second
4  0.0  0.0  first  second

这可能有助于其他人至少确定更好的解决方案。

也可以在此发布this

编辑,找到了更好的解决方法。使用:

data[['t1', 't2']] = data['b'].map(mapper).apply(pd.Series)

所以,在你的情况下,这应该有效:

df[['t1', 't2']] = df['zRow'].map(ReturnDateRange).apply(pd.Series)