Reputation: 247
I am trying to multiply a pandas.core.series.Series (df1['col1']) with a pandas.core.frame.DataFrame (df2). Their indexes are the same but it always gives me back ' 'Timestamp' object is not iterable ' when I am trying to multiply them by doing
k = df1['col1'].mul(df2)
[In] df1:
[out]
Index col1 col2
2065-12-20 12 apples
2061-10-31 12 candies
2045-11-28 70 marshmalow
2043-10-31 11 apples
2040-07-30 21 cars
2049-06-30 64 planes
2036-01-31 14 glasses
[In] df2:
Index col1 col2 etc....
2065-12-20 14 120
2061-10-31 18 800
2045-11-28 19 580
2043-10-31 21 12
2040-07-30 44 21
2049-06-30 1.2 17
2036-01-31 61.8 61
and I want
Index col1 col2 etc....
2065-12-20 14*12 120*12
2061-10-31 18*12 800*12
2045-11-28 19*70 580*70
2043-10-31 21*11 12*11
2040-07-30 44*21 21*21
2049-06-30 1.2*64 17*64
2036-01-31 61.8*14 61*61
the df1['col1'] was in days before, I transformed it using
df1['col1'] = (df1['col1'].values / np.timedelta64(1, 'D')).astype(int)
df1.dtypes = dtype('int32')
any ideas why it throw back an error?
Upvotes: 3
Views: 6642
Reputation: 152587
The exception comes because you multiply with a whole DataFrame (including a timestamp column!), not just a single column:
df1['col1'].mul(df2)
Given the data frames you probably wanted:
df1['col1'].mul(df2['col1'])
If you want to process multiple columns at once:
df1['col1'].values[:, None] * df2[['col1', 'col2', ...]] # explicitly list columns
df1['col1'].values[:, None] * df2[df2.columns[1:]] # all columns except the first
Upvotes: 1