Я бы использовал groupby
для чего-то подобного, так как вы можете иметь дело с каждым домохозяйством одновременно
Пример (обратите внимание, что не все случаи обрабатываются)
import pandas as pd
# Create the dataframe
df = pd.DataFrame(data={
"TypeOfPerson": ["Son", "Parent", "Daughter", "Son", "Parent", "Daughter", "Daughter", "Parent", "Son"],
"HouseholdNumber": [1, 1, 1, 1, 2, 2, 2, 3, 3],
"Age": [17,50,20,13,40,19,5, 50, 25]
})
# Add new column
df["Child"] = pd.Series()
# Group by household
households = df.groupby("HouseholdNumber")
# Iterate through groups
for household_number in households.groups:
household = households.get_group(household_number)
# Household offspring
offspring = household.query("TypeOfPerson == 'Son' | TypeOfPerson == 'Daughter'")
# Sons and daughters that are 18 or younger
children = offspring.query("Age <= 18")
# Sons and daughters that young adults (19 >= age <= 25)
young_adults = household.query("Age >= 19 & Age <= 25")
# Parents
parents = household.query("TypeOfPerson == 'Parent'")
# Change original data frame
df.loc[offspring.index, "Child"] = "No"
if children.shape[0]:
df.loc[parents.index, "Child"] = "a"
elif young_adults.shape[0]:
df.loc[parents.index, "Child"] = "b"
Я вполне уверен, необходимо использовать PNGs с WinForms для получения прозрачности изображения. Я знаю, что использовал их успешно.
Править: Когда я использовал PNGs, я накладывал их с управлением Изображением на Form1. BackgroundImage; я не использовал их в кнопках.
Я думаю, что Ваш лучший выбор состоит в том, чтобы переключиться от использования кнопочного управления к использованию управления изображением. Вы могли бы также попытаться изменить стиль кнопки на плоский (я думаю, что это было плоско, возможно, один из других стилей), и видящий, можно ли получить эффект, Вы хотите тот путь.
Необходимо установить свойство BackColor кнопки к "Прозрачному".
Button1. BackColor = система. Рисование. Цвет. Прозрачный;
создайте класс, полученный из кнопки, и вставьте этот код.
protected override CreateParams CreateParams
{
get
{
const int WS_EX_TRANSPARENT = 0x20;
CreateParams cp = base.CreateParams;
cp.ExStyle |= WS_EX_TRANSPARENT;
return cp;
}
}
и в метод create
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
SetStyle(ControlStyles.Opaque, true);
this.BackColor = Color.Transparent;
Я использую Visual Studio 2005 и пробовал следовать приведенному выше примеру, но он не работал (фрагмент в методе создания). У меня есть фон для моей формы, и я пытаюсь создать скошенные прозрачные кнопки.
в настоящее время вставка приведенного выше кода делает мой фон прозрачным, а все мои кнопки - белыми.
вот фрагмент моего кода
Bitmap mainFormBackground = (Bitmap)Image.FromFile("background.jpg");
this.BackgroundImage = mainFormBackground;
this.BackColor = Color.Black;
this.ForeColor = Color.White;
Добавить некоторые кнопки
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
SetStyle(ControlStyles.Opaque, true);
this.BackColor = Color.Transparent;
Я даже пробовал
btnName.BackColor = Color.Transpare;
это тоже не работало
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
public class TransparentControl : Control
{
public TransparentControl()
{
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
SetStyle(ControlStyles.Opaque, true);
SetStyle(ControlStyles.ResizeRedraw, true);
this.BackColor = Color.Transparent;
}
protected override void OnPaint(PaintEventArgs pevent)
{
Graphics g = pevent.Graphics;
g.DrawRectangle(Pens.Black, this.ClientRectangle);
}
protected override void OnPaintBackground(PaintEventArgs pevent)
{
// don't call the base class
//base.OnPaintBackground(pevent);
}
protected override CreateParams CreateParams
{
get
{
const int WS_EX_TRANSPARENT = 0x20;
CreateParams cp = base.CreateParams;
cp.ExStyle |= WS_EX_TRANSPARENT;
return cp;
}
}
// rest of class here...
}