Python 我有一个包含两列(A列和B列)的数据框架

Python 我有一个包含两列(A列和B列)的数据框架,python,regex,Python,Regex,在A栏中有三句话(ABC、DEF、GHI)。句子以&**开头,以“”结尾 ** 例如:这是一个句子 Column A Column B (('<s>', '<s>'), 'abc') 0.043025210084033615 (('<s>', 'abc'), 'abc') 0.65234375 (('abc', 'abc'), 'abc')

在A栏中有三句话(ABC、DEF、GHI)。句子以&**开头,以“”结尾 **

例如:这是一个句子

 Column A                           Column B

(('<s>', '<s>'),  'abc')            0.043025210084033615
(('<s>', 'abc'),  'abc')            0.65234375
(('abc', 'abc'),  'abc')            0.04259501965923984
(('abc', 'abc'),  'abc')            0.18604651162790697
(('abc', 'abc'),  '</s>')           0.41317365269461076
(('abc', '</s>'), '</s>')           0.011148272017837236
A列B列
(“,”和“abc”)0.043025210084033615
((“‘abc’,‘abc’)0.65234375
((‘abc’、‘abc’、‘abc’)0.04259501965923984
((‘abc’、‘abc’、‘abc’)0.18604651162790697
((‘abc’,‘abc’,“”)0.41317365269461076
((‘abc’,“”),“”)0.011148272017837236
当一个句子以结束标记“”)结尾时,“”“我想将B列乘以一个特定句子的所有行 示例:(0.04302521*0.65234375*0.04259502*0.186046512*0.413173653*0.011148272=1.02452)

我想得到每个数据帧的输出

 Column A                           Column B



 (('<s>', '<s>'),  'abc')            0.043025210084033615
 (('<s>', 'abc'),  'abc')            0.65234375
 (('abc', 'abc'),  'abc')            0.04259501965923984
 (('abc', 'abc'),  'abc')            0.18604651162790697
 (('abc', 'abc'),  '</s>')           0.41317365269461076
 (('abc', '</s>'), '</s>')           0.011148272017837236
 (('<s>', '<s>'),  'def')            0.09090909090909091
 (('def', 'def'),  'def')            0.008287292817679558
 (('def', 'def'),  'def')            0.13506493506493505
 (('def', 'def'),  '</s>')           0.007653061224489796
 (('def', '</s>'), '</s>')           0.08333333333333333
 (('<s>', '<s>'),  'ghi')            0.5
 (('ghi', 'ghi'),  'ghi')            0.125
 (('ghi', 'ghi'),  'ghi')            0.033766233766233764
 (('ghi', 'ghi'),  '</s>')           0.0694980694980695
 (('ghi','</s>'),  '</s>')           0.16666666666666666
A列B列
(“,”和“abc”)0.043025210084033615
((“‘abc’,‘abc’)0.65234375
((‘abc’、‘abc’、‘abc’)0.04259501965923984
((‘abc’、‘abc’、‘abc’)0.18604651162790697
((‘abc’,‘abc’,“”)0.41317365269461076
((‘abc’,“”),“”)0.011148272017837236
(“,”和“def”)0.091
((‘def’、‘def’、‘def’)0.008287292817679558
((‘def’、‘def’、‘def’)0.13506493506493505
((“def”,“def”),“”)0.007653061224489796
((‘def’,“”),“”)0.08333
((''),“ghi”)0.5
((‘ghi’、‘ghi’、‘ghi’)0.125
((‘ghi’、‘ghi’、‘ghi’)0.033766233766233764
((‘ghi’,‘ghi’,“”)0.06949806694980695
((‘ghi’,“”),“”)0.1666666
输出应为:(0.04302521*0.65234375*0.04259502*0.186046512*0.413173653*0.011148272=1.02452) (0.090909091*0.008287293*0.135064935*0.007653061*0.083333333=6.48958) (0.5*0.125*0.033766234*0.069498069*0.1666667=2.44447)

输出应采用以下格式 1.02452 6.48958
2.44447

一种方法是创建一列“句子”,以便稍后使用
groupby
。假设您的数据帧被称为
df
。我使用0创建此列

df['sentence'] = 0
现在,在A列包含
('',)
的列中输入1,然后使用
cumsum
为每个句子指定不同的数字:

df['sentence'].loc[df['Column A'].str.contains("('<s>', '<s>')")] = 1
df['sentence'] = df['sentence'].cumsum()

根据您对结果的wan方式,您可以使用
df.groupby('句')['Column B'].prod().tolist()
将其作为列表来获取

在同一句话的新“bloc”之前是否总是有
('',)
,熊猫数据框中的字符串模式我想将B列乘以特定句子的所有行Hello Ben.T谢谢你的帮助!当我执行下面的代码时:df['station'].loc[df['Column A'].str.contains(“('',”)”)=1键错误:'[nan nan nan\n nan]不在索引中'@Balu不确定没有您的准确输入它是什么。在做我的回答之前,请尝试
df=df.reset\u index(drop=True)
也许索引号有问题我用你的代码试过了,但我仍然面临同样的问题
df=df.reset\u index(drop=True)
Iam遇到下面的错误文件“C:\ProgramData\Anaconda3\lib\site packages\pandas\core\index.py”,第1327行,在"convert_to_indexer.format(mask=objarr[mask])中,keyror:“[nan nan nan nan\n nan]不在索引中”@Balu如果执行
type(df['Column A'].loc[0])
?@Ben T在用0创建一个列(句子)之后,我运行下面的命令它被执行为df['Column A']=df['Column A'].astype(str)
df.groupby('sentence')['Column B'].prod()
Out[527]: 
sentence
1.0    1.024519e-06
2.0    6.489579e-08
3.0    2.444467e-05
Name: Column B, dtype: float64