#python #pandas #dataframe
Вопрос:
Хотя это кажется легкой проблемой, я некоторое время боролся с ней. У меня есть два кадра данных, между которыми я хочу определить дубликаты по определенным столбцам, а затем я хочу суммировать значения обоих кадров данных по другому столбцу. Я сделаю все возможное, чтобы показать это. В следующих таблицах описана структура двух фреймов данных, которые я буду называть df1 и df2.
делать | 2019-12-01 | 2019-06-04 |
---|---|---|
БМВ | 0 | 3 |
фольксваген | 1 | 3 |
делать | 2018-12-01 | 2019-06-04 |
---|---|---|
ТЕСЛА | 0 | 2 |
фольксваген | 2 | 2 |
это моя попытка
df = pd.concat ([df1, df2], axis=1)
df_2 = df [df.duplicated (subset=[ 'make'], keep=False)]
df_2 = pd.DataFrame(df_2)
valuePosition1 = df_2.columns.get_loc(2019-12-01)
valuePosition2 = df_2.columns.get_loc(2018-12-01)
flow = min(df_2.iloc[:, valuePosition1].sum(), df_2.iloc[:, valuePosition2].sum())
print(flow)
ответ должен быть 1, так как VW есть как в df1[2019-12-01], так и в df2[2018-12-01]. Но я продолжаю получать странные ошибки:
The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()
Который, похоже, даже не понимает, что я делаю. Я действительно не в своем уме. Оба кадра данных также очень большие, поэтому мне понадобится быстрый способ сделать это.
Любое руководство или помощь будут оценены по достоинству!
Комментарии:
1. Не могли бы вы включить весь соответствующий код, пожалуйста? Где df.дублированный, определенный и т. Д. И будьте осторожны с интервалом «get_loc (2019-12-01)».
2. Ах, спасибо вам. дублирование-это функция панд, которую я нашел. Я включу ссылку. Я надеюсь, что это то, о чем вы спрашиваете.
Ответ №1:
Лучше объединить вдоль оси строк ( concat(..., axis=0)
), так duplicated
как предполагается, что она будет работать вдоль этой оси:
Возвращает логический ряд, обозначающий повторяющиеся строки.
Вы также можете использовать loc
(который в основном основан на метках), а не iloc
(который в основном основан на целочисленных позициях), учитывая, что вы знаете, какие столбцы вас интересуют.
import pandas as pd
df1 = pd.read_csv('sample1.csv', sep='s ')
df2 = pd.read_csv('sample2.csv', sep='s ')
df = pd.concat([df1,df2], axis=0)
print(df)
dfd = df[df.duplicated(subset=['make'], keep=False)]
print(dfd)
flow = min(dfd.loc[:, '2019-12-01'].sum(),
dfd.loc[:, '2018-12-01'].sum())
print(flow)
Вывод из df
make 2019-12-01 2019-06-04 2018-12-01
0 BMW 0.0 3 NaN
1 VW 1.0 3 NaN
0 TESLA NaN 2 0.0
1 VW NaN 2 2.0
Вывод из dfd
make 2019-12-01 2019-06-04 2018-12-01
1 VW 1.0 3 NaN
1 VW NaN 2 2.0
Выход из потока
1.0
Комментарии:
1. Спасибо! Это действительно полезно !