如何在具有重复日期时间的熊猫数据框上执行操作?

问题描述:

例如,给定一个数据帧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 
+0

目前还不清楚给我...... – Wen

+0

你需要澄清什么? – dirtysocks45

+0

预期输出和你的df1看起来像一个pd.Series – Wen

使用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 
+0

整个晚上你和我:-) LOL – Wen

+2

我们看......即使如此,我们得到了这个! – piRSquared

+0

哈哈,我的坏人。我现在有点恶心 – dirtysocks45

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) 
+0

我完全改变了我的问题 – dirtysocks45

+0

@ dirtysocks45应该是一个新问题吗? – Wen

+0

我不想堵塞饲料。 – dirtysocks45