У меня есть десятки очень похожих фреймов данных. Я хочу объединить все значения столбца «ЗНАЧЕНИЕ» из каждого в списки и вернуть dataFrame, в котором столбец «ЗНАЧЕНИЕ» состоит из этих списков. Я хочу сделать это только для строк, где 'PV' содержит подстроку из списка подстрок.
Я придумал один способ, который, как мне казалось, сработает, но он очень неприятен и не работает Всё равно не работает (остановил на 3м). Должен быть лучший способ сделать это, есть ли у кого-нибудь здесь какие-нибудь идеи? Спасибо за любую помощь.
import pandas as np
# Example dataFrames
df0 = pd.DataFrame(data={'PV': ['pv1', 'pv2', 'pv3', 'pv4'], 'VALUE': [1, 2, 3, 4]})
df1 = pd.DataFrame(data={'PV': ['pv1', 'pv2', 'pv3', 'pv4'], 'VALUE': [5, 6, 7, 8]})
df2 = pd.DataFrame(data={'PV': ['pv1', 'pv2', 'pv3', 'pv4'], 'VALUE': [10, 11, 12, 13]})
DATAFRAMES
df0 dataFrame df1 dataFrame df2 dataFrame
PV VALUE PV VALUE PV VALUE
pv1 1 pv1 5 pv1 10
pv2 2 pv2 6 pv2 11
pv3 3 pv3 7 pv3 12
pv4 4 pv4 8 pv4 13
# Nasty code I thought might work
strings = ['v2', 'v4']
for i, row0 in df0.iterrows():
for j, row1 in df1.iterrows():
if (row0['PV']==row1['PV']) & any(substring in row0['PV'] for substring in strings):
df0.at[i,'VALUE'] = [row0['VALUE'], row1['VALUE']]
Желаемый результат:
PV VALUE
pv1 1
pv2 [2,6]
pv3 3
pv4 [4,8]
@enke спасибо за помощь! Мне пришлось немного с этим поиграться, чтобы выяснить, как предотвратить появление вложенных списков, и в итоге я использовал следующую прокомментированную функцию/код/вывод:
def appendValues(df0, df1, pvStrings=['v2','v4']):
# Turn values in VALUE column into list objects
df0['VALUE'] = df0['VALUE'].apply(lambda x: x if isinstance(x,list) else [x])
# For rows were PV string DOESN'T contain substring, set value to max()+1
# apply makes lists [x] empty if they were set to max()+1, else [x]
df1['VALUE'] = (df1['VALUE']
.where(df1['PV'].str.contains('|'.join(pvStrings)), df1['VALUE'].max()+1)
.apply(lambda x: [x] if x
Подробнее здесь: https://stackoverflow.com/questions/713 ... -as-a-list
Добавление значений столбцов из одного фрейма данных в другой в виде списка ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение