2017-10-18 18 views
1

例如,給定一個數據幀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

回答

2

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

1
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

相關問題