Вычтите и разделите кадры данных с разной длиной, но покажите только те, которые изменили значение - PullRequest
0 голосов
/ 25 января 2019

У меня есть два кадра данных с разными длинами строк, одинаковыми столбцами, но не расположенными соответственно. Я хотел бы вычесть df2 из df1, а затем разделить результат на df1 (чтобы в основном получить процент в конце).

df1

Index       Bircher  Club   Quiche
2019-1-18     16       1     4
2019-1-19     4        9     6
2019-1-28     8        1     6
2019-1-29     4        7     6
2019-1-20     8        1     6

df2

Index       Bircher  Quiche  Club
2019-1-10     15       1     3
2019-1-18     4        1     1
2019-1-20     4        2     6
2019-1-26     2        1     5
2019-1-25     4        1     2

Результат: только дата 2019-1-18 и 2019-1-20 отображаются на обоих кадрах и могут использоваться. Тогда Df3 просто выражается с помощью этой математической формулы (Df1-DF2) / Df1

Index       Bircher  Club   Quiche
2019-1-18     75%     0%     75%
2019-1-20     50%    -100%    0%

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Вы также можете использовать groupby и nth

x = pd.concat([df1,df2]).groupby(level=0)

fg = ((x.nth(0) - x.nth(-1) )/x.nth(0))*100

fg[fg!= 0].dropna()
0 голосов
/ 25 января 2019

Просто с макушки головы:

# Join the tables to find common rows
merged_df = df1.join(df2, lsuffix='Left', rsuffix='Right', how='inner')

# Calculate the required percentages, column by column
for col in df1.columns:
    merged_df[col] = (merged_df[col + 'Left'] - merged_df[col + 'Right']) / merged_df[col + 'Left']

# Optionally delete all other columns except df1.columns
merged_df = merged_df.loc[:, df1.columns.values]

Предполагается, что вы хотите вычислить процент для всех столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...