我知道将函数作为组键传递每个索引值调用一次函数,返回值用作组名.我无法弄清楚的是如何在列值上调用函数.
所以我可以这样做:
people = pd.DataFrame(np.random.randn(5, 5),
columns=['a', 'b', 'c', 'd', 'e'],
index=['Joe', 'Steve', 'Wes', 'Jim', 'Travis'])
def GroupFunc(x):
if len(x) > 3:
return 'Group1'
else:
return 'Group2'
people.groupby(GroupFunc).sum()
Run Code Online (Sandbox Code Playgroud)
这将数据分成两组,其中一组的索引值为3或更小,另一组的长度为3或更多.但是我如何传递其中一个列值?因此,例如,如果每个索引点的列d值大于1.我意识到我可以执行以下操作:
people.groupby(people.a > 1).sum()
Run Code Online (Sandbox Code Playgroud)
但我想知道如何在用户定义的函数中执行此操作以供将来参考.
就像是:
def GroupColFunc(x):
if x > 1:
return 'Group1'
else:
return 'Group2'
Run Code Online (Sandbox Code Playgroud)
但我怎么称呼这个?我试过了
people.groupby(GroupColFunc(people.a))
Run Code Online (Sandbox Code Playgroud)
和类似的变体,但这不起作用.
如何将列值传递给函数?我如何传递多个列值,例如分组是否people.a> people.b?
我仍然是Python pandas的pivot_table的新手,想要问一种计算一列中值的频率的方法,该列也链接到另一列ID.DataFrame如下所示.
import pandas as pd
df = pd.DataFrame({'Account_number':[1,1,2,2,2,3,3],
'Product':['A', 'A', 'A', 'B', 'B','A', 'B']
})
Run Code Online (Sandbox Code Playgroud)
对于输出,我想得到如下内容:
Product
A B
Account_number
1 2 0
2 1 2
3 1 1
Run Code Online (Sandbox Code Playgroud)
到目前为止,我尝试了这段代码:
df.pivot_table(rows = 'Account_number', cols= 'Product', aggfunc='count')
Run Code Online (Sandbox Code Playgroud)
这段代码给了我两个相同的东西.上面的代码有什么问题?我问这个问题的部分原因是这个DataFrame只是一个例子.我正在处理的真实数据有数万个account_numbers.感谢您的帮助!
我尝试在 VS Code 中调试 Rust 程序,但收到错误:

单击确定后,VS Code 打开“settings.json”:

我安装了这些扩展:

我的程序是一个简单的“hello world”应用程序。
我正在尝试计算大型数据集中“力”列的均值和置信区间(95%)。我需要通过对不同的“类”进行分组来使用 groupby 函数的结果。
当我计算平均值并将其放入新数据框中时,它为我提供了所有行的 NaN 值。我不确定我是否走正确的路。有没有更简单的方法来做到这一点?
这是示例数据框:
df=pd.DataFrame({ 'Class': ['A1','A1','A1','A2','A3','A3'],
'Force': [50,150,100,120,140,160] },
columns=['Class', 'Force'])
Run Code Online (Sandbox Code Playgroud)
为了计算置信区间,我做的第一步是计算平均值。这是我使用的:
F1_Mean = df.groupby(['Class'])['Force'].mean()
Run Code Online (Sandbox Code Playgroud)
这给了我NaN所有行的值。
我一直在试图弄清楚如何将行总和添加到 Pandas 数据透视表。请有人帮我指出正确的方向。
这是我下面的代码。
x.pivot_table(index = ["am","spot_or_contract"],
columns = "status",
values = "shipment_id",
aggfunc = "count").fillna('')
Run Code Online (Sandbox Code Playgroud)
非常感谢您提前
这是数据框"df"中的数据:
Document Name Time
SPS2315511 A 1 HOUR
SPS2315512 B 1 - 2 HOUR
SPS2315513 C 2 - 3 HOUR
SPS2315514 C 1 HOUR
SPS2315515 B 1 HOUR
SPS2315516 A 2 - 3 HOUR
SPS2315517 A 1 - 2 HOUR
Run Code Online (Sandbox Code Playgroud)
我使用下面的代码,它给出了数据透视表中计数的摘要,
table = pivot_table(df, values=["Document"],
index=["Name"], columns=["Time"],
aggfunc=lambda x: len(x),
margins=True, dropna=True)
Run Code Online (Sandbox Code Playgroud)
但我想要的是在右键单击数据透视表并选择"显示值为 - >行总计百分比"时的行计算百分比.由于我的文档是非数字值,我无法得到它.
Count of Document Column Labels
Name 1 HOUR 1 - 2 HOUR 2 - 3 HOUR Grand Total
A 33.33% 33.33% 33.33% 100.00% …Run Code Online (Sandbox Code Playgroud) 我在创建df['var'2]和更改下面的代码df['var1']。执行完这些更改后,我想将newrow(with df['var'2])附加到数据框,同时保留原始(尽管现在已更改)行(具有df['var1'])。
for i, row in df.iterrows():
while row['var1'] > 30:
newrow = row
newrow['var2'] = 30
row['var1'] = row['var1']-30
df.append(newrow)
Run Code Online (Sandbox Code Playgroud)
我知道使用时iterrows(),行变量是副本而不是视图,这就是为什么更改未在原始数据框中更新的原因。因此,我将如何更改此代码以实际将newrow追加到数据框?
谢谢!