如何在具有重复日期时间的熊猫数据框上执行操作?
问题描述:
例如,给定一个数据帧df1
:如何在具有重复日期时间的熊猫数据框上执行操作?
Date Computers Syms
2011-01-10 400. 1
2011-01-10 500. 1
2012-04-12 450. 1
和变量log = some_df.loc[some_df.index, 'Cat']
和price = df2.loc[:, log]
, 我想计算
df1.loc[df1.index, syms] = price * log
其中syms
只是系列。当我尝试了上面的命令,我得到的错误:
ValueError: cannot reindex from a duplicate axis
我应该如何设置的syms
列值到表达式给出,有些指标是等同的?
的预期产出将
Date syms1 syms2
2011-01-10 price * log price * log
2011-01-10 price * log price * log
2012-04-12 price * log price * log
答
使用loc
,您可以使用:
来表示所有的轴,无论是指数或列。
df_trades.loc[:, 'syms'] = houses * cars
df_trades
Date Computers syms
0 2011-01-10 400 80000
1 2011-01-10 500 80000
2 2012-04-12 450 80000
您还可以使用pd.DataFrame.assign
产生一个副本,新列
df_trades.assign(syms=houses * cars)
Date Computers syms
0 2011-01-10 400 80000
1 2011-01-10 500 80000
2 2012-04-12 450 80000
如果syms
是一系列列名的
syms = pd.Series(['syms1', 'syms2'])
df_trades.assign(**dict((s, houses * cars) for s in syms))
Date Computers syms1 syms2
0 2011-01-10 400 80000 80000
1 2011-01-10 500 80000 80000
2 2012-04-12 450 80000 80000
答
df ['Syms'] = 400 * 200
df
Out[189]:
Date Computers syms
0 2011-01-10 400 80000
1 2011-01-10 500 80000
2 2012-04-12 450 80000
编辑
syms=['sys1','sys2']
d = dict.fromkeys(syms, 200*400)
df.assign(**d)
目前还不清楚给我...... – Wen
你需要澄清什么? – dirtysocks45
预期输出和你的df1看起来像一个pd.Series – Wen