shi*_*shy 5 python numpy dataframe pandas
这可能是一个微不足道的问题,但我仍然想弄清楚熊猫/ numpy.
所以,假设我有一个具有以下结构的表:
group_id | col1 | col2 | col3 | "A" | "B"
x | 1 | 2 | 3 | NaN | 1
x | 3 | 2 | 3 | 1 | 1
x | 4 | 2 | 3 | 2 | 1
y | 1 | 2 | 3 | NaN | 3
y | 3 | 2 | 3 | 3 | 3
z | 3 | 2 | 3 | 10 | 2
z | 2 | 2 | 3 | 6 | 2
z | 4 | 2 | 3 | 4 | 2
z | 4 | 2 | 3 | 2 | 2
Run Code Online (Sandbox Code Playgroud)
请注意,有一个group_id可以对每行中的元素进行分组.所以在开始时,我有列group_id和col1-col3的值.
然后对于每一行,如果col1,col2或col3的值为1,则"A"为NaN,否则该值基于公式(与此处无关,因此我将一些数字放在适当的位置).
那,我知道如何使用:
df["A"] = np.where(((df['col1'] == 1)|(df['col2']== 1) | (df['col3']) == 1))), NaN, value)
Run Code Online (Sandbox Code Playgroud)
但是对于列"B",我需要用特定组的A列中的最小值填充它.
因此,例如,对于具有组X的所有行,"B"等于"1",因为对于所有组"x"行,列A中的最小值等于1.
同样,对于组"y"中的行,最小值为3,对于组"z",最小值为2.我究竟是如何使用pandas ...?这让我更加困惑,因为特定组的行数可能有不同的大小.
如果它们的大小都相同,我可以说用预设范围内的最小值填充它.
我希望这是有道理的; 如果我应该提供更清晰的例子或澄清任何事情,请告诉我!
为每组使用最小的A列 transform
df.groupby('group_id')['A'].transform('min')
Run Code Online (Sandbox Code Playgroud)