有没有一种方法可以向散点图的大小与某些数据成比例的散点图添加辅助图例?
我写了下面的代码来生成散点图。散点图的颜色表示年份(取自用户定义的df),散点图的大小表示变量3(也取自df,但为原始数据):
import pandas as pd
colors = pd.DataFrame({'1985':'red','1990':'b','1995':'k','2000':'g','2005':'m','2010':'y'}, index=[0,1,2,3,4,5])
fig = plt.figure()
ax = fig.add_subplot(111)
for i in df.keys():
df[i].plot(kind='scatter',x='variable1',y='variable2',ax=ax,label=i,s=df[i]['variable3']/100, c=colors[i])
ax.legend(loc='upper right')
ax.set_xlabel("Variable 1")
ax.set_ylabel("Variable 2")
Run Code Online (Sandbox Code Playgroud)
此代码(包含我的数据)产生以下图形:
因此,虽然对颜色/年份进行了很好的明确定义,但分散的大小却没有。
如何添加辅助或附加图例来定义散点图的大小?
作为问题 Pandas 的扩展:按 A 列分组数据,按 B 列的现有值过滤 A我的数据现在每个值都有一个日期时间,如下所示:
2011-10-01 20:24:21
Run Code Online (Sandbox Code Playgroud)
编辑:起初数据具有正确的结构,但来自 dtype: object。我用以下方法更改了它:
dataset['Date']= pd.to_datetime(dataset['Date'])
Run Code Online (Sandbox Code Playgroud)
它是否正确?
所以目前,我有一个数据集,其结构如下所示:
_Group, Value, Date:_
A 2 **2011-10-01 20:24:21**
A 1 **2011-10-01 20:27:21**
A 3 **2011-10-01 20:25:21**
B 1 **2011-10-01 20:23:21**
B 2 **2011-10-01 20:26:21**
B 3 **2011-10-01 20:24:21**
B 3 **2011-10-01 20:25:21**
Run Code Online (Sandbox Code Playgroud)
我想根据日期时间对每个组的值进行排序。
--> 我已经检查过,数据时间的 dtype: datetime,但是当我尝试对其进行排序(升序)时,并非所有日期时间在组中都按正确的顺序排列。当我尝试只订购日期时,效果很好。
我尝试了以下代码:
dataset.sort_values('Date').sort_index(level='Group')
Run Code Online (Sandbox Code Playgroud)
因此,日期的顺序是正确的,但有时它们与小时和秒无关。我的错误在哪里?
我很感谢任何帮助!
import pandas as pd
data={'x':['A','A','B','B','C','E','F'],
'y':['B','C','A','C','D','F','G']}
df=pd.DataFrame(data)
print(df)
Run Code Online (Sandbox Code Playgroud)
我有一个像这样的大数据框(简化为ABC):
x y
0 A B
1 A C
2 B A
3 B C
4 C D
5 E F
6 F G
Run Code Online (Sandbox Code Playgroud)
有一些"循环",如第0行:A < - > B和第2行:B < - > A,这对我来说意味着相同的关系.
我希望得到x和y列值之间的关系,并给它们一个唯一的新id.
因此,对于此示例表,这意味着:
A = B = C = D给它一个唯一的id,即90 E = F = G给它一个唯一的id,即91
我需要的Result表应该是:
id value
0 90 A
1 90 B
2 90 C
3 90 D
4 91 E
5 91 F
6 91 G
Run Code Online (Sandbox Code Playgroud)
我怎么能用熊猫来实现这个目标?非常感谢帮助!
我有一个大约为(1200,10)的大型数据帧,大部分是字符串,我必须在现有引用列说'Y'的基础上附加一个新列说'Z',其值是'A','B','C或未知(NaN或其他),因此我需要在df中选择三个对应的列之一,例如“ D”,“ E”,“ F”,或输出NaN并将此值附加为列“ Z”。我目前有以下代码:
df = pd.DataFrame({'T': {0: '.', 1: '.', 2: '.', 3: '.'},
'G': {0: '.', 1: '.', 2: '.', 3: '.'},
'D': {0: 4, 1: 1, 2: 5, 3: 3},
'E': {0: 6, 1: 2, 2: 7, 3: 2},
'F': {0: 8, 1: 3, 2: 9, 3: 1},
'K': {0: '.', 1: '.', 2: '.', 3:'.'},
'Y': {0: 'A', 1: 'B', 2: 'B', 3: np.nan}})
d = {'A': 'D', 'B': 'E', 'C': 'F'}
df['Z'] = df.lookup(df.index, …Run Code Online (Sandbox Code Playgroud) 在气流中,我可以缩短这些任务依赖线吗?
a >> b >> c >> f >> G
a >> b >> d >> f >> G
Run Code Online (Sandbox Code Playgroud)
到
a >> b
b >> c
b >> d
c >> f
d >> f
f >> g
Run Code Online (Sandbox Code Playgroud)
这些是等价的吗?时间或效率有什么不同吗?询问是否使用代码格式化程序的原因是行长度成为第一种样式和更长的变量任务名称的问题。
有什么建议或建议吗?
我有一个包含以下列的数据框:
duration, cost, channel
2 180 TV1
1 200 TV2
2 300 TV3
1 nan TV1
2 nan TV2
2 nan TV3
2 nan TV1
1 40 TV2
1 nan TV3
Run Code Online (Sandbox Code Playgroud)
一些成本值是nans,为了填补它们,我需要执行以下操作:
示例:TV2频道,我们有3个条目,其中一个条目具有空成本.所以我需要做以下事情:
average = 200+40/3 = 80
if duration = 1, cost = 80 * 1.5 = 120
duration, cost, channel
2 180 TV1
1 120 TV2
2 300 TV3
1 nan TV1
2 80 TV2
2 nan TV3
2 nan TV1 …Run Code Online (Sandbox Code Playgroud) 任何人都可以帮我弄清楚为什么这不起作用:
ages = ['15-19','20-24','25-29','30-34','35-39','40-44','45-49','50-54','55-59','60-64','65-69','70-74','75-79','80-84']
race['age_group'] = pd.cut(race.Age,range(13,84,5),right=False, labels=ages)
race[['Age','age_group']].head(15)
Run Code Online (Sandbox Code Playgroud)
这是我得到的结果:
Age age_group
0 31 30-34
1 38 40-44
2 45 45-49
3 30 30-34
4 45 45-49
5 35 35-39
6 32 30-34
7 33 35-39
8 29 30-34
9 42 40-44
10 34 35-39
11 48 50-54
12 35 35-39
13 51 50-54
14 38 40-44
Run Code Online (Sandbox Code Playgroud) 有什么方法可以在熊猫中使用fuzzywuzzy来加速模糊字符串匹配。
我有一个数据框,extra_names它的名称我想与另一个数据框运行模糊匹配names_df。
>> extra_names.head()
not_matching
0 Vij Sales
1 Crom Electronics
2 REL Digital
3 Bajaj Elec
4 Reliance Digi
>> len(extra_names)
6500
>> names_df.head()
names types
0 Vijay Sales 1
1 Croma Electronics 1
2 Reliance Digital 2
3 Bajaj Electronics 2
4 Pai Electricals 2
>> len(names_df)
250
Run Code Online (Sandbox Code Playgroud)
截至目前,我正在使用以下代码运行逻辑,但它需要永远完成。
choices = names_df['names'].unique().tolist()
def fuzzy_match(row):
best_match = process.extractOne(row, choices)
return best_match[0], best_match[1] if best_match else '',''
%%timeit
extra_names['best_match'], extra_names['match%'] = extra_names['not_matching'].apply(fuzzy_match)
Run Code Online (Sandbox Code Playgroud)
当我发布这个问题时,查询仍在运行。有没有办法加快这个模糊字符串匹配过程?
我有一个 pandas 数据框df。
中有 27 列df。
我想阅读 的第 1、2、10 栏到最后几栏df。我可以做到这一点df.iloc[0,1,9,10,11,.....,26],但如果数据框有很多列,那么输入起来就太乏味了。阅读专栏的更优雅的方式是什么?
我正在使用 python v3.7
如果我有以下数据框“国家”:
country info
england london-europe
scotland edinburgh-europe
china beijing-asia
unitedstates washington-north_america
Run Code Online (Sandbox Code Playgroud)
我想获取信息字段,并且必须删除“-”之后的所有内容,变为:
country info
england london
scotland edinburgh
china beijing
unitedstates washington
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
pandas ×9
python ×9
dataframe ×3
airflow ×1
datetime ×1
fuzzywuzzy ×1
group-by ×1
matplotlib ×1
missing-data ×1
networkx ×1
python-3.x ×1
relation ×1
scatter-plot ×1
unique ×1