我见过很多关于数据透视表的问题.即使他们不知道他们询问数据透视表,他们通常也是.几乎不可能写出一个规范的问题和答案,其中包含了旋转的所有方面....
......但是我要试一试.
现有问题和答案的问题在于,问题通常集中在OP难以概括以便使用一些现有的良好答案的细微差别.但是,没有一个答案试图给出全面的解释(因为这是一项艰巨的任务)
从我的谷歌搜索中查看一些示例
pd.DataFrame.pivot因此,每当有人搜索时,pivot他们会得到零星的结果,而这些结果可能无法回答他们的具体问题.
您可能会注意到,我明显地将我的列和相关列值命名为与我将如何在下面的答案中进行调整相对应.请注意,以便熟悉哪些列名称可以从哪里获得您正在寻找的结果.
import numpy as np
import pandas as pd
from numpy.core.defchararray import add
np.random.seed([3,1415])
n = 20
cols = np.array(['key', 'row', 'item', 'col'])
arr1 = (np.random.randint(5, size=(n, 4)) // [2, 1, 2, 1]).astype(str)
df = pd.DataFrame(
add(cols, arr1), columns=cols
).join(
pd.DataFrame(np.random.rand(n, 2).round(2)).add_prefix('val')
)
print(df)
key row item col val0 val1
0 key0 row3 item1 col3 0.81 0.04
1 key1 …Run Code Online (Sandbox Code Playgroud) 所以我的数据集有n个日期的位置信息.问题是每个日期实际上是一个不同的列标题.例如,CSV看起来像
location name Jan-2010 Feb-2010 March-2010
A "test" 12 20 30
B "foo" 18 20 25
Run Code Online (Sandbox Code Playgroud)
我想要的是它看起来像
location name Date Value
A "test" Jan-2010 12
A "test" Feb-2010 20
A "test" March-2010 30
B "foo" Jan-2010 18
B "foo" Feb-2010 20
B "foo" March-2010 25
Run Code Online (Sandbox Code Playgroud)
问题是我不知道列中有多少个日期(虽然我知道它们总是会在名字后面开始)
我有一个数据帧:
df = pd.DataFrame([[2, 4, 7, 8, 1, 3, 2013], [9, 2, 4, 5, 5, 6, 2014]], columns=['Amy', 'Bob', 'Carl', 'Chris', 'Ben', 'Other', 'Year'])
Run Code Online (Sandbox Code Playgroud)
Amy Bob Carl Chris Ben Other Year
0 2 4 7 8 1 3 2013
1 9 2 4 5 5 6 2014
Run Code Online (Sandbox Code Playgroud)
还有一本字典:
d = {'A': ['Amy'], 'B': ['Bob', 'Ben'], 'C': ['Carl', 'Chris']}
Run Code Online (Sandbox Code Playgroud)
我想重塑我的数据框看起来像这样:
Group Name Year Value
0 A Amy 2013 2
1 A Amy 2014 9
2 B Bob 2013 4
3 B …Run Code Online (Sandbox Code Playgroud) 想知道 pd.melt 是否支持熔化多个列。我有以下示例试图将 value_vars 作为列表列表,但出现错误:
ValueError: Location based indexing can only have [labels (MUST BE IN THE INDEX), slices of labels (BOTH endpoints included! Can be slices of integers if the index is integers), listlike of labels, boolean] types
使用熊猫 0.23.1。
df = pd.DataFrame({'City': ['Houston', 'Austin', 'Hoover'],
'State': ['Texas', 'Texas', 'Alabama'],
'Name':['Aria', 'Penelope', 'Niko'],
'Mango':[4, 10, 90],
'Orange': [10, 8, 14],
'Watermelon':[40, 99, 43],
'Gin':[16, 200, 34],
'Vodka':[20, 33, 18]},
columns=['City', 'State', 'Name', 'Mango', 'Orange', 'Watermelon', 'Gin', 'Vodka'])
Run Code Online (Sandbox Code Playgroud)
期望的输出:
City …Run Code Online (Sandbox Code Playgroud) 我有一个数据框:
df1 = pd.DataFrame(
[['2011-01-01','2011-01-03','A'], ['2011-04-01','2011-04-01','A'], ['2012-08-28','2012-08-30','B'], ['2015-04-03','2015-04-05','A'], ['2015-08-21','2015-08-21','B']],
columns=['d0', 'd1', 'event'])
Run Code Online (Sandbox Code Playgroud)
df1 = pd.DataFrame(
[['2011-01-01','2011-01-03','A'], ['2011-04-01','2011-04-01','A'], ['2012-08-28','2012-08-30','B'], ['2015-04-03','2015-04-05','A'], ['2015-08-21','2015-08-21','B']],
columns=['d0', 'd1', 'event'])
Run Code Online (Sandbox Code Playgroud)
它包含在 d0 到 d1 的指定时间间隔内发生的一些事件 A 和 B。(实际上还有更多的事件,它们是混合的,但是它们在日期上没有交集。)而且,这个间隔可以是1天(d0 = d1)。我需要从 df1 到 df2,其中每个事件的这些时间间隔都是“展开”的,即:
df2 = pd.DataFrame(
[['2011-01-01','A'], ['2011-01-02','A'], ['2011-01-03','A'], ['2011-04-01','A'], ['2012-08-28','B'], ['2012-08-29','B'], ['2012-08-30','B'], ['2015-04-03','A'], ['2015-04-04','A'], ['2015-04-05','A'], ['2015-08-21','B']],
columns=['Date', 'event'])
Run Code Online (Sandbox Code Playgroud)
d0 d1 event
0 2011-01-01 2011-01-03 A
1 2011-04-01 2011-04-01 A
2 2012-08-28 2012-08-30 B
3 2015-04-03 2015-04-05 A
4 2015-08-21 2015-08-21 B
Run Code Online (Sandbox Code Playgroud)
我尝试根据重新采样并比较 ffill = bfill 的区域来执行此操作,但无法得出任何结果。如何以最简单的方式做到这一点?
我有这样的数据帧
NSW VIC
0 6718023 5023203
1 6735528 5048207
2 6742690 5061266
3 6766133 5083593
4 6786160 5103965
Run Code Online (Sandbox Code Playgroud)
我想这样改变它
0 6718023 NSW
1 6735528 NSW
2 6742690 NSW
3 6766133 NSW
4 6786160 NSW
5 5023203 VIC
6 5048207 VIC
7 5061266 VIC
8 5083593 VIC
9 5103965 VIC
Run Code Online (Sandbox Code Playgroud)
我怎么能完成这份工作?
我知道,这个问题已经被问过好几次了,但是我没有根据已经问过的问题来构建我的解决方案。
我有:
id| country | series name | 2015 | 2016 | 2017
--+----------+----------------+------+------+------
0 | saudi | fertility rate | 1 | 2 | 2 |
1 | saudi | CO2 emissions | 5 | 10 | 15 |
2 | pakistan | fertility rate | 1 | 2 | 1 |
3 | pakistan | CO2 emissions | NaN | NaN | NaN |
Run Code Online (Sandbox Code Playgroud)
DF我想要:
id| country | year | fertility rate | CO2 emissions
--+----------+------+----------------+---------
0 | …Run Code Online (Sandbox Code Playgroud)