如何使用Pandas更新数据框列值?

时间:2014-08-01 13:39:51

标签: python pandas

所以说我有一堆这样的数据:

10-12-2014 3.45
10-12-2014 3.67
10-12-2014 4.0
10-12-2014 5.0
10-13-2014 6.0
10-13-2014 8.9

等等。

我希望以这种格式将这些内容放入Pandas数据框中:

10-12-2014    3.45    3.57    4.0    5.0
10-13-2014    6.0     8.9     etc   etc

为了做到这一点,目前我只有这样的事情:

rows = cursor.fetchall()
df = pd.DataFrame(columns('Date', Val1', 'Val2', 'Val3', 'Val4'))
previous_date = 0
for row in rows:
    if previous_date == 0:
        df.

这就是我被困的地方 - 我似乎无法找到一种只为该列添加日期和其中一个值的方法。我也不确定如何在将来的迭代中更新旧列,因为我真的只能找到只添加整行的人的例子。或者有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

使用字符串进入该格式,您可以执行以下操作。

1)获取数据为df

d = """10-12-2014 3.45
10-12-2014 3.67
10-12-2014 4.0
10-12-2014 5.0
10-13-2014 6.0
10-13-2014 8.9"""

df = pd.read_csv(StringIO.StringIO(d),sep="\s",names=['Date','v'])

2)将其分组并应用函数来索引您的值。

groups = df.groupby('Date')
df =     groups.apply(lambda x: x['v'].reset_index(drop=True))

#line below is equivalent to above but clunkier use if you really want the ValX as columns
#df =     groups.apply(lambda x: pd.Series({"Val{0}".format(1+i):each for i,each in enumerate(x['v'])}))

3)重置索引:使用unstack将值索引转换为列并重置索引以将日期重置为列...

df =     df.unstack(level=1)
df =     df.reset_index()

编辑速度,如果您不关心命名列

groups = df.groupby('Date').indices
df = pd.DataFrame(data= groups.values(),index=groups.keys()).reset_index()

<强>输出

         Date  Val1  Val2  Val3  Val4
0  10-12-2014  3.45  3.67     4     5
1  10-13-2014  6.00  8.90   NaN   NaN