IIUC возможен с merge
, split
, melt
и concat
:
dfB = dfB.merge(dfA, on='product')
dfB = pd.concat([dfB.iloc[:,:-1], dfB.tags.str.split(',', expand=True)], axis=1)
dfB = dfB.melt(id_vars=['customer', 'product']).drop(columns = ['product', 'variable'])
dfB = pd.concat([dfB.customer, pd.get_dummies(dfB['value'])], axis=1)
dfB
Выход:
customer filled sprinkles chocolate glazed
0 A 0 0 1 0
1 C 0 0 1 0
2 A 0 0 1 0
3 A 0 0 1 0
4 B 0 0 1 0
5 B 0 0 1 0
6 C 0 0 0 1
7 C 0 0 0 1
8 A 0 1 0 0
9 C 0 1 0 0
10 A 0 1 0 0
11 A 1 0 0 0
12 B 1 0 0 0
13 B 1 0 0 0
C # сохраняет на другом конце:
var listOfInts = new List<int>();
Java имеет
List<String> data = newList(); //Java, where newList() is a helper method to create an ArrayList();
List<String> data = newList("Hello", "World"); // a helper method which takes a T....
Map<String, List<String>> anagrams = newMap(); // Java, where newMap creates a new HashMap();
в C #, уже есть что-то вроде этого, а именно:
var listOfInts = new List<int>();
В Java это не имеет особого смысла, так как вы обычно объявляете переменные с типом интерфейса:
List<String> myList = new ArrayList<String>();
Однако в большинстве случаев имеет смысл опустить объявление универсального типа без предупреждений компилятора, например:
List<String> myList = new ArrayList();
Но поскольку Java всегда очень явна и многословна во всем, это может также остаться то же самое.
(И почему опять кто-нибудь может написать C # или Java без IDE?)
РЕДАКТИРОВАТЬ:
О, есть предложение для этого! Сладкий. Спасибо, Брайан.
Я согласен, что было бы неплохо. Лучшим примером может служить ситуация, когда требуется еще больше печатать:
Dictionary<string, int> myDictionary = new Dictionary<string, int>();
Жизнь была бы проще, хотя и незначительно, если бы ее можно было создать как:
Dictionary<string, int> myDictionary = new();
и:
Dictionary<string, int> myDictionary = { {"a",1}, {"b",2} };
Ваша версия менее читабельна, извините.
Код предназначен для чтения людьми, только случайно машинами.
В новых предложениях Java 7 есть предложение по выводу типов, которое облегчит жизнь. декларации дженериков.
Например,
Map<String, List<String>> anagrams = new HashMap<String, List<String>>();
и
Map<String, List<String>> anagrams = new HashMap<>();
См. здесь для получения дополнительной информации.
C # имеет:
var listOfInts = new List<int>();
, что позволяет добиться того же самого.
Как правило, при использовании объектно-ориентированных подходов вы часто создаете больше экземпляров более определенного типа, чем ваша переменная. Кроме того, часто рекомендуется использовать менее конкретный тип или интерфейс. В этих случаях это не имело бы смысла.
Подумайте об интерфейсах:
IList<int> = new(); // What instance should the compiler infer?
Кроме того, с технической точки зрения сигнатура операции не включает в себя ее тип возврата, так что этот тип назначения будет полностью отличается от обычного случая.
В C # 3 уже есть зеркальное отображение для локальных переменных, неявно набирая:
var listOfInts = new List<int>();
Этот не делает ' Тем не менее, он работает для нелокальных переменных .
В Java вывод типа учитывает цель назначения, поэтому при использовании статического импорта и хитрых библиотек, таких как Google Java Collections , вы можете написать код, такой как:
List<Integer> integers = newArrayList();
Обратите внимание, что это поддерживает переменную на основе интерфейса, в то же время определяя реализацию на стороне конструкции, что приятно.
Какие крайние случаи я мог бы пропустить?
Я кратко обсудил этот возможный синтаксис C # в своем блоге в январе. См. Комментарии к этому посту для получения отзывов читателей о плюсах и минусах синтаксиса.
Существуют ли другие способы сократить время создания экземпляров (без использования VB6-esque var) и при этом сохранить смысл?
Возможно, да.
"var" в C #, однако, не похож на "вариант" в VB6. «var» не означает то же самое, что и «объект», а также не вводит динамическую типизацию или типизацию по типу утиной. Это просто синтаксический сахар для , исключающий избыточное указание типа правой стороны .
В C # 3.0 есть механизм, позволяющий уменьшить дублирование при наборе текста, но это делается из-за расплывчатости типа «вы» объявляется, но явно в типе, который вы создаете:
например
var listOfInts = new List<int>();