Я пытаюсь объединить 2 фрейма данных, и в настоящее время значения для 2-го фрейма данных добавляются в конец первого, когда я хочу включить его в качестве дополнительного столбца.
1-й фрейм данных
┌──────────┬────────────┬────────────────────┬───────────────────────┬─────────┬────────────────┬────────────┬─────────────────────┬────────────────────┬─────────────────┬────────────────────┬───────────┬──────────────┬────────────────┬───────────────────┬───────────┬────────────┬───────┐
│ filename │ date │ txVolume(USD) │ adjustedTxVolume(USD) │ txCount │ marketcap(USD) │ price(USD) │ exchangeVolume(USD) │ fees │ activeAddresses │ medianTxValue(USD) │ medianFee │ paymentCount │ generatedCoins │ averageDifficulty │ blockSize │ blockCount │ value │
├──────────┼────────────┼────────────────────┼───────────────────────┼─────────┼────────────────┼────────────┼─────────────────────┼────────────────────┼─────────────────┼────────────────────┼───────────┼──────────────┼────────────────┼───────────────────┼───────────┼────────────┼───────┤
│ ada │ 2017-10-01 │ 436003334.53699994 │ 131165286.735 │ 3096.0 │ 0.0 │ 0.021678 │ 50068700.0 │ 291.170785 │ 5973.0 │ 18065.296266 │ 0.17107 │ 1661.0 │ │ │ │ │ │
│ ada │ 2017-10-02 │ 1025157737.96 │ 151391424.74 │ 2943.0 │ 0.0 │ 0.024607 │ 57641300.0 │ 316.07460299999997 │ 5858.0 │ 24206.767144999998 │ 0.17107 │ 1792.0 │ │ │ │ │ │
│ ada │ 2017-10-03 │ 604612406.44 │ 125245327.846 │ 1808.0 │ 624650688.0 │ 0.025757 │ 16997800.0 │ 182.28098300000002 │ 3701.0 │ 21063.743716900004 │ 0.17107 │ 1018.0 │ │ │ │ │ │
└──────────┴────────────┴────────────────────┴───────────────────────┴─────────┴────────────────┴────────────┴─────────────────────┴────────────────────┴─────────────────┴────────────────────┴───────────┴──────────────┴────────────────┴───────────────────┴───────────┴────────────┴───────┘
2-й фрейм данных:
┌──────────┬────────────┬─────────────────────────────────┐
│ filename │ date │ monthly percentage price change │
├──────────┼────────────┼─────────────────────────────────┤
│ ada │ 2017-10-31 │ │
│ ada │ 2017-11-30 │ 2.3253932111955717 │
│ ada │ 2017-12-31 │ 5.768998209206785 │
│ ada │ 2018-01-31 │ -0.17893930881865483 │
└──────────┴────────────┴─────────────────────────────────┘
Я хочу включить «столбец месячной цены в%» в конце консолидированного фрейма данных на основеключи: «имя файла» и «дата».Ниже приведен код, который я написал, чтобы добраться до этой точки.Я все еще новичок, поэтому заранее прошу прощения за мой плохо написанный код:
# get data file names
path =r'C:\Users\david\Documents\Crypto\Crypto_historical_data'
filenames = glob.glob(path + "/*.csv")
# Create a list called 'data':
data = []
# Include filename as a column in the dataframe
for csv in filenames:
frame = pd.read_csv(csv)
#frame['filename'] creates a new column named filename
# os.path.basename() turns a path like /a/d/c.txt into the filename c.txt
frame['filename'] = os.path.splitext(os.path.basename(csv))[0]
data.append(frame)
# Load all data in to the dataframe
df = pd.concat(data, sort=False)
# Filter out any rows where price is blank
df1 = df.dropna(subset=['price(USD)'])
df1 = pd.DataFrame(data=df1)
df1 = df1.set_index(['filename', 'date'], inplace=False)
# You now have all prices sorted by date & by currency
# Exclude ctxc and ven as they are < 6 months old
df1 = df1.query('filename != ["ctxc", "ven"]')
# Get end of month prices
# Sets date as DateTime format:
df1 = df1.reset_index()
df1['date'] = pd.to_datetime(df1['date'])
# Sets date column as the index
# Groups data by each coin
# Converts daily to monthly prices, taking last price of the month
df2 = df1.set_index('date').groupby('filename').resample('M')['price(USD)'].last()
# Calculate monthly returns for each coin
df2 = df2.pct_change()
df2 = pd.DataFrame(data=df2)
df2 = df2.rename(columns = {'price(USD)':'monthly percentage price change'})
# Merge monthly returns in to df1
df3 = pd.merge(df1, df2, left_index=True, right_index=True,how='outer')
При попытке слияния я получаю сообщение об ошибке: «ValueError: невозможно объединиться без указания уровня и перекрывающихся имен»
Я надеюсь, что кто-нибудь подскажет мне наиболее эффективный способ добавления столбца ежемесячного процентного изменения в конце кадра данных, используя в качестве ключей «имя файла» и «дату», гарантируя, что я не будупотерять любые данные с 1-го кадра данных.Заранее спасибо всем, кто может мне помочь - я выдернул себе волосы из-за этого!