说我有下面的DataFrame,它具有0/1项,具体取决于在某个月内是否发生了什么。
Y = [0,0,1,1,0,0,0,0,1,1,1]
X = pd.date_range(start = "2010", freq = "MS", periods = len(Y))
df = pd.DataFrame({'R': Y},index = X)
R
2010-01-01 0
2010-02-01 0
2010-03-01 1
2010-04-01 1
2010-05-01 0
2010-06-01 0
2010-07-01 0
2010-08-01 0
2010-09-01 1
2010-10-01 1
2010-11-01 1
Run Code Online (Sandbox Code Playgroud)
我想要创建一个第二列,该列列出直到下一次出现1为止的月数。
也就是说,我需要:
R F
2010-01-01 0 2
2010-02-01 0 1
2010-03-01 1 0
2010-04-01 1 0
2010-05-01 0 4
2010-06-01 0 3
2010-07-01 0 2
2010-08-01 0 1
2010-09-01 1 0
2010-10-01 1 0
2010-11-01 …Run Code Online (Sandbox Code Playgroud) 假设我有以下DataFrame
dic = {"Date": ["04-Jan-16", "04-Jan-16", "04-Jan-16", "05-Jan-16", "05-Jan-16"],
"Col": ['A', 'A', 'B', 'A', 'B']}
df = pd.DataFrame(dic)
df
Col Date
0 A 04-Jan-16
1 A 04-Jan-16
2 B 04-Jan-16
3 A 05-Jan-16
4 B 05-Jan-16
Run Code Online (Sandbox Code Playgroud)
我需要返回第二个DataFrame,它按日列出A和B的出现次数.即
A B
Date
04-Jan-16 2 1
05-Jan-16 1 1
Run Code Online (Sandbox Code Playgroud)
我有一种感觉这涉及"groupby",但我不太了解它以使其成为上面的格式^
我有以下 Pandas 系列的日期/时间:
pd.DataFrame({"GMT":["13 Feb 20089:30 AM", "22 Apr 20098:30 AM",
"14 Jul 20108:30 AM", "01 Jan 20118:30 AM"]})
GMT
13 Feb 20089:30 AM
22 Apr 20098:30 AM
14 Jul 20108:30 AM
01 Jan 20118:30 AM
Run Code Online (Sandbox Code Playgroud)
我想要的是将日期和时间部分分成两个单独的列,即
Date Time
13 Feb 2008 9:30 AM
22 Apr 2009 8:30 AM
14 Jul 2010 8:30 AM
01 Jan 2011 8:30 AM
Run Code Online (Sandbox Code Playgroud)
有什么帮助吗?想过简单地单独拼接每个字符串,但想知道是否有更好的解决方案将它们作为日期时间对象返回。
Stata具有函数expand,它将行添加到与特定列中的值对应的数据库中.例如:
我有:
df = pd.DataFrame({"A":[1, 2, 3],
"B":[3,4,5]})
A B
0 1 3
1 2 4
2 3 5
Run Code Online (Sandbox Code Playgroud)
我需要的:
df2 = pd.DataFrame({"A":[1, 2, 3, 2, 3, 3],
"B":[3,4,5, 4, 5, 5]})
A B
0 1 3
1 2 4
2 3 5
3 2 4
4 3 5
6 3 5
Run Code Online (Sandbox Code Playgroud)
df.loc [0,'A']中的值为1,因此没有额外的行添加到DataFrame的末尾,因为B = 3只应该发生一次.
df.loc [1,'A']中的值为2,因此在DataFrame的末尾添加了一个观察值,使B = 4的总出现次数为2.
df.loc [2,'A']中的值为3,因此将两个观察值添加到DataFrame的末尾,使得B = 5的总出现次数为3.
为了让我开始,我已经仔细研究了以前的问题,但没有运气.任何帮助表示赞赏.
我试图弄清楚如何为我正在制作的 matplotlib 表加粗列和行标签。
我已经浏览了不同的表格属性,我可以弄清楚如何设置单个单元格的样式,但不能确定实际的列或行标签。
此外,我不知道如何加粗任何东西……只是字体大小、实际字体和颜色。
有什么帮助吗?
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
fig, axs =plt.subplots(figsize = (10,6))
clust_data = np.random.random((10,3))
collabel=("col 1", "col 2", "col 3")
axs.axis('tight')
axs.axis('off')
df = pd.DataFrame(np.random.randn(10, 4),
columns=['a','b','c','d'],
index = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'])
table = axs.table(cellText=df.values, colLabels = df.columns, rowLabels = df.index, loc='center')
plt.show()
Run Code Online (Sandbox Code Playgroud)
编辑:
想通了,虽然它有点笨重。您可以在“celld”属性中找到列/行标签。然后,您可以使用 .set_text_props(fontproperties = FontProperties(weight = 'bold') 将其设置为粗体。即
import numpy as np
import matplotlib.pyplot as plt …Run Code Online (Sandbox Code Playgroud) 我有我试图使用 Matplotlib 绘制的季度数据。我希望主要的 xtick 标签显示年份,次要的 xtick 标签显示季度。
然而,我所能找到的只是月度数据。也就是说,以下代码(使用 matplotlib 的 mdates 函数)将每月进行次要 xticks,但我没有看到季度选项...
有什么帮助吗?
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
A = pd.DataFrame(np.random.rand(6*4))
A.index = pd.date_range(start = "2017", periods = len(A), freq = "QS")
fig, ax = plt.subplots(figsize = (10,6))
ax.plot(A)
years = mdates.YearLocator() # every year
months = mdates.MonthLocator() # every month
yearsFmt = mdates.DateFormatter('%Y')
ax.xaxis.set_major_locator(years)
ax.xaxis.set_major_formatter(yearsFmt)
ax.xaxis.set_minor_locator(months)
Run Code Online (Sandbox Code Playgroud)