Pandas Groupby应用函数来计算大于零的值
我以下列方式使用groupby和agg:
df.groupby('group')['a'].agg({'mean' : np.mean, 'std' : np.std})
Run Code Online (Sandbox Code Playgroud)
我想在同一列['a']中计算零以上的值
以下行按我的意愿计算,
sum(x > 0 for x in df['a'])
Run Code Online (Sandbox Code Playgroud)
但是在申请groupby时我无法正常工作.
下面是一个将pandas计算应用于groupby的示例,我试过:
df.groupby('group')['a'].apply(sum(x > 0 for x in df['a']))
Run Code Online (Sandbox Code Playgroud)
但是我收到一条错误消息:AttributeError:'numpy.int32'对象没有属性' module '
任何人都可以建议如何做到这一点?
我正在使用Pandas处理和输出在Wordpress中发布的表的数据
我正在添加HTML代码以格式化一列颜色
从示例Dataframe开始:
import numpy as np
import pandas as pd
df = pd.DataFrame({
'A': ['group1', 'group2', 'group3'],
'B': ['foo', 'foo', 'foo'] })
Run Code Online (Sandbox Code Playgroud)
打印df
A B
0 group1 foo
1 group2 foo
2 group3 foo
Run Code Online (Sandbox Code Playgroud)
然后我将相同的格式代码添加到每一行,如下所示:
df['Status'] = '<span style="color: #00CD00">Active</span>'
print df
A B Status
0 group1 foo <span style="color: #00CD00">Active</span>
1 group2 foo <span style="color: #00CD00">Active</span>
2 group3 foo <span style="color: #00CD00">Active</span>
Run Code Online (Sandbox Code Playgroud)
我将数据导出为csv文件,因为我需要逗号分隔符:
output = r'C:\test\test.csv'
df.to_csv(output, index=False)
Run Code Online (Sandbox Code Playgroud)
如果我在Excel中打开csv,它看起来与上面完全一样
但是如果我在文本编辑器中打开它(我需要做的是获取分隔符),我发现带有格式化字符串的列有另外的双引号字符,如下所示:
"<span style=""color: #00CD00"">Active</span>"
Run Code Online (Sandbox Code Playgroud)
- 这没有添加双引号 - 这是正确的:
<span …Run Code Online (Sandbox Code Playgroud) 有几个关于字符串操作的问题,但我找不到允许我执行以下操作的答案——我认为它应该很简单......
我有一个 DataFrame,其中包含一个包含文件名和路径的列
下面生成一个具有代表性的示例 DataFrame:
index = ['1']
columns=['root']
df = pd.DataFrame(index=index,columns=columns)
path = 'C:\\folder1\\folder2\\folder3\\folder4\\filename.csv'
df['root']=path
df
Out[89]:
root
C:\folder1\folder2\folder3\folder4\filename.csv
1 rows × 1 columns
Run Code Online (Sandbox Code Playgroud)
我只想得到字符串的“文件名”部分。行数多,路径不固定,不能用str.replace
我可以像这样去掉最右边的“.csv”部分:
df['root'] = df['root'].str.rstrip('.csv')
df
Out[90]:
root
C:\folder1\folder2\folder3\folder4\filename
1 rows × 1 columns
Run Code Online (Sandbox Code Playgroud)
- 但我无法使用我读过的任何方法来删除字符串左侧的路径部分。
鉴于路径的前面元素可以从记录更改为记录,我如何仅返回此路径(字符串)的“文件名”部分?
有人有建议吗?非常感谢任何帮助。
示例数据框:
rand = np.random.RandomState(1)
df = pd.DataFrame({'A': ['group1', 'group2', 'group3'] * 2,
'B': rand.rand(6),
'C': rand.rand(6),
'D': rand.rand(6)})
Run Code Online (Sandbox Code Playgroud)
打印df
A B C D
0 group1 0.417022 0.186260 0.204452
1 group2 0.720324 0.345561 0.878117
2 group3 0.000114 0.396767 0.027388
3 group1 0.302333 0.538817 0.670468
4 group2 0.146756 0.419195 0.417305
5 group3 0.092339 0.685220 0.558690
Run Code Online (Sandbox Code Playgroud)
分组依据A列
group = df.groupby('A')
Run Code Online (Sandbox Code Playgroud)
使用agg返回每个组的最大值
max1 = group['B'].agg({'max' : np.max})
print max1
max
A
group1 0.417022
group2 0.720324
group3 0.092339
Run Code Online (Sandbox Code Playgroud)
但是我想保留(或取回)其他列C和D中的适当数据。这将是包含最大值的行的剩余数据。因此,返回值应为:
A B C D
group1 0.417022 …Run Code Online (Sandbox Code Playgroud)