Панды: Широкая в длинную трансформацию: как получить номера строк и столбцов

Используйте метод EntityFunctions.TruncateTime (Nullable) . Он будет транслироваться в функцию TRUNCATETIME() TSQL в сгенерированном SQL-запросе, который делает то, что вам нужно:

Возвращает выражение с укороченными значениями времени.

blockquote>

Таким образом, ваш код должен быть следующим:

//get data
var myData = from log in db.OperationLogs
             group log by EntityFunctions.TruncateTime(log.CreateTime) into g
             orderby g.Key
             select new { CreateTime = g.Key, Count = g.Count() };

1
задан xx123 5 March 2019 в 18:40
поделиться

2 ответа

Создание данных и значений стеков

df = pd.DataFrame({'A': [0.1, 0.1, 0.1],
                   'B': [0.2, 0.2, 0.2],
                   'C': [0.3, 0.3, 0.3]}, 
                   index=['A', 'B', 'C'])
mapping = {col: idx for idx, col in enumerate(df.columns, 1)}
df = df.unstack().to_frame().reset_index()
df.columns = ['Col1', 'Col2', 'Value']

Блок данных

>>> df

    Col1  Col2  Value
0   A     A     0.1
1   A     B     0.1
2   A     C     0.1
3   B     A     0.2
4   B     B     0.2
5   B     C     0.2
6   C     A     0.3
7   C     B     0.3
8   C     C     0.3

Сопоставление оставшихся значений [116 ]

>>> df.assign(
        Row_num=df['Col1'].map(mapping),
        Col_num=df['Col2'].map(mapping)
    )

Выход

    Col1  Col2  Value Row_num Col_num
0   A     A     0.1   1    1
1   A     B     0.1   1    2
2   A     C     0.1   1    3
3   B     A     0.2   2    1
4   B     B     0.2   2    2
5   B     C     0.2   2    3
6   C     A     0.3   3    1
7   C     B     0.3   3    2
8   C     C     0.3   3    3
0
ответ дан ulmefors 5 March 2019 в 18:40
поделиться

Я уверен, что есть более эффективный способ сделать это, поскольку мой метод включает два цикла for, но это быстрый и грязный способ преобразования данных так, как вы ищете:

# df is your initial dataframe
df = pd.DataFrame({"A": [1,1,1],
                   "B": [2,2,2],
                   "C": [3,3,3]}, 
                   index=["A","B","C"])

#long_rows will store the data we need for the new df
long_rows = []

# loop through each row 
for i in range(len(df)):

    #loop through each column
    for j in range(len(df.columns)):

        ind = list(df.index.values)[i]
        col = list(df.columns.values)[j]
        val = df.iloc[i,j]
        row = [ind, col, i+1, j+1, val]
        long_rows.append(row)

new_df = pd.DataFrame(long_rows, columns=["Col1", "Col2", "Row1", "Row2", "Value"])
[113 ] и результат:

new_df
    Col1    Col2    Row1    Row2    Value
0   A       A       1       1       1
1   A       B       1       2       2
2   A       C       1       3       3
3   B       A       2       1       1
4   B       B       2       2       2
5   B       C       2       3       3
6   C       A       3       1       1
7   C       B       3       2       2
8   C       C       3       3       3
0
ответ дан CGul 5 March 2019 в 18:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: