如何快速将 pandas 中的列除以其他列?
How to divide columns by other columns in pandas in a fast way?
我想在 pandas 的大数据框中将列除以其他列。如何简单快捷地完成此操作?
这是一个例子:
sent1 sent2 sent3 media fake other
0.67 0.25 1.6 3.0 4.0 5.0
我的输出是
sent1 sent2 media fake other sent1/media sent1/fake sent1/other sent2/media sent2/fake sent2/ot
0.67 0.25 3.0 4.0 5.0 0.22. 0.16. 0.134 0.08 0.625 0.05
我想以最简单的方式获得这个结果。
到目前为止,我是这样计算的:
df['sent1/media'] = df['sent1'] / df['media']
df['sent1/fake'] = df['sent1'] / df['fake']
df['sent1/other'] = df['sent1'] / df['other']
你可以这样做:
for num in ['sent1', 'sent2']:
for denom in ['media', 'fake', 'other']:
df[f'{num}/{denom}'] = df[num] / df[denom]
一个broadcasting
选项:
from itertools import product
import pandas as pd
df = pd.DataFrame({
'sent1': {0: 0.67}, 'sent2': {0: 0.25},
'sent3': {0: 1.6}, 'media': {0: 3.0},
'fake': {0: 4.0}, 'other': {0: 5.0}
})
# Grab sent1 and sent2 Columns
sents = df[['sent1', 'sent2']]
# Grab Non Sent Columns
others = df.filter(regex='^(?!sent)')
# Broadcast Division
results = (
sents.to_numpy()[..., None] / others.to_numpy()[:, None]
).reshape((len(df), len(sents.columns) * len(others.columns)))
# Convert to new dataframe with new column labels
new_df = pd.DataFrame(
results,
columns=map('/'.join,
(product(sents.columns.tolist(), others.columns.tolist())))
)
# Join to df
new_df = df.join(new_df)
print(new_df.to_string())
sent1 sent2 sent3 media fake other sent1/media sent1/fake sent1/other sent2/media sent2/fake sent2/other
0 0.67 0.25 1.6 3.0 4.0 5.0 0.223333 0.1675 0.134 0.083333 0.0625 0.05
我想在 pandas 的大数据框中将列除以其他列。如何简单快捷地完成此操作?
这是一个例子:
sent1 sent2 sent3 media fake other
0.67 0.25 1.6 3.0 4.0 5.0
我的输出是
sent1 sent2 media fake other sent1/media sent1/fake sent1/other sent2/media sent2/fake sent2/ot
0.67 0.25 3.0 4.0 5.0 0.22. 0.16. 0.134 0.08 0.625 0.05
我想以最简单的方式获得这个结果。
到目前为止,我是这样计算的:
df['sent1/media'] = df['sent1'] / df['media']
df['sent1/fake'] = df['sent1'] / df['fake']
df['sent1/other'] = df['sent1'] / df['other']
你可以这样做:
for num in ['sent1', 'sent2']:
for denom in ['media', 'fake', 'other']:
df[f'{num}/{denom}'] = df[num] / df[denom]
一个broadcasting
选项:
from itertools import product
import pandas as pd
df = pd.DataFrame({
'sent1': {0: 0.67}, 'sent2': {0: 0.25},
'sent3': {0: 1.6}, 'media': {0: 3.0},
'fake': {0: 4.0}, 'other': {0: 5.0}
})
# Grab sent1 and sent2 Columns
sents = df[['sent1', 'sent2']]
# Grab Non Sent Columns
others = df.filter(regex='^(?!sent)')
# Broadcast Division
results = (
sents.to_numpy()[..., None] / others.to_numpy()[:, None]
).reshape((len(df), len(sents.columns) * len(others.columns)))
# Convert to new dataframe with new column labels
new_df = pd.DataFrame(
results,
columns=map('/'.join,
(product(sents.columns.tolist(), others.columns.tolist())))
)
# Join to df
new_df = df.join(new_df)
print(new_df.to_string())
sent1 sent2 sent3 media fake other sent1/media sent1/fake sent1/other sent2/media sent2/fake sent2/other
0 0.67 0.25 1.6 3.0 4.0 5.0 0.223333 0.1675 0.134 0.083333 0.0625 0.05