У меня есть DataFrame, похожий на этот: Имя Имя Доход Индекс 0 Яблоко 100000 1 яблоко 110000 2 тесла 80000 3 тесла 85000 и я хочу сделать это в следующей таблице: Год 1 Год 2 Яблоко ...

0
Basley 23 Янв 2021 в 22:01

2 ответа

Лучший ответ

Для начала нужно добавить столбец, в котором будет указан год. Предполагая, что у каждой компании есть строка за все годы и что они расположены по порядку, вы можете просто использовать pd.GroupBy.cumcount(). Затем используйте этот столбец в вызове pivot.

In [8]: df = pd.DataFrame({
   ...:     'name': ['Apple', 'Apple', 'Tesla', 'Tesla'],
   ...:     'revenue': [100_000, 110_000, 80_000, 85_000]
   ...: })
   ...:
   ...: print(df)
    name  revenue
0  Apple   100000
1  Apple   110000
2  Tesla    80000
3  Tesla    85000

In [9]: df['year'] = 1 + df.groupby('name').cumcount()
   ...: print(df)
    name  revenue  year
0  Apple   100000     1
1  Apple   110000     2
2  Tesla    80000     1
3  Tesla    85000     2


In [10]: df2 = df.pivot('name', 'year', 'revenue')
    ...: print(df2)
year        1       2
name
Apple  100000  110000
Tesla   80000   85000
1
Stuart Berg 23 Янв 2021 в 19:11

Вам не хватает неявного столбца, год, чтобы получить его:

df['Year'] = df.groupby('Name').cumcount()

Тогда вы готовы продолжить:

df.reset_index(drop=True) # just to clean up your index, may not be necessary
df.pivot(index='Name',columns='Year')
0
brunoff 23 Янв 2021 в 19:15
65863244