Используйте numpy.where
с цепочкой 3 булевых масок с помощью &
для побитового преобразования AND
:
m = df['ad_type'] == 'sale'
#get groups with values before sale
vals = df.loc[m.groupby(df['sender_id']).cumsum() == 0, 'sender_id'].unique()
m1 = df['sender_id'].isin(vals)
#get last duplicated value per groups - for last sale
m2 = ~df.loc[m, 'sender_id'].duplicated(keep='last').reindex(df.index, fill_value=False)
df['count'] = np.where(m & m1 & m2, 'yes', '')
print (df)
sender_id reply_date ad_type count
0 1234 2016-05-16 sharing
1 1234 2017-06-20 sale yes
2 3333 2016-05-16 rental
3 3333 2016-06-20 sale
4 3333 2016-06-21 sale yes
5 6767 2016-05-16 sale
6 101 2016-04-16 sale
7 101 2016-04-17 sale
8 9999 2016-01-01 rental
9 9999 2017-01-19 sharing
10 9999 2018-04-17 sale yes
Сегодня я искал ту же самую вещь. Я нашел это использование Google:
static void Main(string[] args)
{
string setupFileName = @"<Replace the path to vdproj file>";
StreamReader reader = File.OpenText(setupFileName);
string file = string.Empty;
try
{
Regex expression = new Regex(@"(?:\""ProductCode\"" =
\""8.){([\d\w-]+)}");
Regex expression1 = new Regex(@"(?:\""UpgradeCode\"" =
\""8.){([\d\w-]+)}");
file = reader.ReadToEnd();
file = expression.Replace(file, "\"ProductCode\" = \"8:{" +
Guid.NewGuid().ToString().ToUpper() + "}");
file = expression1.Replace(file, "\"UpgradeCode\" = \"8:{"
+ Guid.NewGuid().ToString().ToUpper() + "}");
}
finally
{
// Close the file otherwise the compile may not work
reader.Close();
}
TextWriter tw = new StreamWriter(setupFileName);
try
{
tw.Write(file);
}
finally
{
// close the stream
tw.Close();
}
}
Я знаю, что исходный плакат ищет.NET 2,0 решения этой проблемы. Однако, так как это не было отмечено как.NET, я предложу свое решение C++ проблемы. Это может быть применимо на земле.NET, но я оставлю это другим.
Это не только обновляет информацию о версии в о поле и файле журнала для моего приложения, но также и всей информации о версии Windows, которая замечена в Windows Explorer.
ОБНОВЛЕНИЕ: Добавленный некоторые изменения, которые я внес в процесс начиная со своего исходного ответа.
Прежде всего я переместил весь блок информации о версии от своего файла Project.rc до моего файла Проекта rc2:
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION FILE_VER
PRODUCTVERSION PROD_VER
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904e4"
BEGIN
VALUE "CompanyName", "MyCompany"
VALUE "FileDescription", "Software Description"
VALUE "FileVersion", 1,0,0,1
VALUE "InternalName", "FileName.exe"
VALUE "LegalCopyright", "(c) 2008 My Company. All rights reserved."
VALUE "OriginalFilename", "FileName.exe"
VALUE "ProductName", "Product Name"
VALUE "ProductVersion", 1,0,0,1
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1252
END
END
Это по существу транспортирует весь материал информации о версии, который Вы отредактировали бы от редактора ресурса в отдельный файл. Это делает его так, чтобы Вы не получали ошибки при редактировании файла ресурсов от за пределами редактора. Оборотная сторона - то, что Вы больше не можете редактировать информацию о версии от редактора ресурса. Но, так как мы хотим этот материал, обновленный автоматически, который не является грандиозным предприятием.
Затем, я создал файл VersionInfo.h и добавил его к моему проекту:
#pragma once
//major release version of the program, increment only when major changes are made
#define VER_MAJOR 2
//minor release version of the program, increment if any new features are added
#define VER_MINOR 0
//any bugfix updates, no new features
#define VER_REV 0
//if this is some special release (e.g. Alpha 1) put the special release string here
#define STR_SPECIAL_REL "Alpha 1"
#define FILE_VER VER_MAJOR,VER_MINOR,VER_REV
#define PROD_VER FILE_VER
//these are special macros that convert numerical version tokens into string tokens
//we can't use actual int and string types because they won't work in the RC files
#define STRINGIZE2(x) #x
#define STRINGIZE(x) STRINGIZE2(x)
#define STR_FILE_VER STRINGIZE(VER_MAJOR) "." STRINGIZE(VER_MINOR) "." STRINGIZE(VER_REV)
#define STR_PROD_VER STR_FILE_VER " " STR_SPECIAL_REL
#define STR_COPYRIGHT_INFO "©" BuildYear " Your Company. All rights reserved."
Я затем включал VersionInfo.h в rc2 файл и внес следующие изменения:
#include "VersionInfo.h"
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
<no changes>
VALUE "FileVersion", STR_FILE_VER
<no changes>
VALUE "LegalCopyright", STR_COPYRIGHT_INFO
<no changes>
VALUE "ProductVersion", STR_PROD_VER
<no changes>
С этой установкой я мог отредактировать свой сценарий сборки (который использует Perl) изменить информацию о версии в файле VersionInfo.h прежде, чем восстановить весь проект с помощью devenv командной строки.
Один дополнительный шаг, что я добавил это, может также представлять интерес (хотя он еще не полностью усовершенствован и может быть будущим вопросом здесь), должен генерировать уникальный номер сборки каждый раз, когда проект разрабатывается. В текущем воплощении это всегда работает на полный, восстанавливает, но только эпизодически на возрастающих сборках. То, что я сделал, было, создают файл, названный build_number.incl, который содержит следующее:
#define CurrentBuildNumber "20081020P1525"
Который является по существу датой и временем, что сборка была запущена. Я создал пакетный файл, который выполняется как событие перед сборкой к проекту, который генерирует этот файл. Сценарий также определяет BuildYear так, чтобы авторское право в файле VersionInfo.h всегда содержало год новой сборки. Сценарий пакетной обработки следующий:
echo Generating Build Number
@For /F "tokens=2,3,4 delims=/ " %%A in ('Date /t') do @(
Set Month=%%A
Set Day=%%B
Set Year=%%C
)
@For /F "tokens=1,2,3 delims=/M: " %%A in ('Time /t') do @(
Set Hour=%%A
Set Minute=%%B
Set AmPm=%%C
)
@echo #define CurrentBuildNumber "%Year%%Month%%Day%%AmPm%%Hour%%Minute%" > "$(ProjectDir)\build_number.incl"
@echo #define BuildYear "%Year%" >> "$(ProjectDir)\build_number.incl"
echo ----------------------------------------------------------------------
Этот файл затем включен в любой файл в проекте, который должен использовать номер сборки (т.е. о поле).
Часть этого подбиралась из этого сообщения CodeProject.
Надо надеяться, эта информация оказывается полезной.
У меня была та же проблема, и я узнал то изменение .vdproj
файл в a prebuildevent
точно не делает то, что я люблю.
Я использовал некоторый другой код изменить msi
файл файла после проект установки был сборкой, таким образом, я использую postbuildevent
.
Посмотрите мое сообщение в блоге здесь.
Мы используем программу, которая обновляет каждый AssemblyInfo.cs или AssemblyInfo.vb на основе значения конфигурационного файла. мы выполняем этот исполняемый файл перед каждой сборкой. Это было лучшим, мы могли сделать для автоматизации этого процесса. Можно добавить вызов к этой пакетной обработке в конфигурации проектов как пред шаг сборки.
Вы могли использовать msbuild задачу обновить Вас версия продукта. Проверьте это сообщение от команды MSBuild на этом предмете.
Встраивание числа Пересмотра SVN во время компиляции в Приложении Windows
В моем ответе на этот вопрос я описываю, как я выполняю эту задачу с помощью SVN.
Это не может быть вполне, что Вы после, но путь назад в туманах времени, которое я записал чему-то названному stampver, который может автоинкремент номер сборки непосредственно в .exe файле как шаг постсборки.
Этот консольный редактор ресурса позволяет создавать надежный и повторяемый процесс для обновления Информационных ресурсов Версии продукта во время заключительного этапа процесса сборки от командной строки.
Посмотрите конкретно пакетное управление страницы информации о версии файла для больших деталей:
Изучите использование RCS, CVS и/или подверсии. Я только знаком с RCS; мое понимание - то, что CVS основан на RCS, но более всесторонний. Я читал на различных платах, что подверсия лучше, но я никогда не использовал ее. RCS был достаточен для отслеживания изменения и версии на всех моих документах и проектах программного обеспечения.
RCS здесь: http://www.cs.purdue.edu/homes/trinkle/RCS/
CVS здесь: http://www.nongnu.org/cvs/
Подверсия здесь: http://subversion.tigris.org/